jueves, 15 de marzo de 2018

Clase 14 marzo 2018

Memoria
  • Shared Global Area (SGA): es el área más grande de memoria y quizás el más importante
  • Shared Pool: es una caché que mejora el rendimiento ya que almacena parte del diccionario de datos y el parsing de algunas consultas en SQL.El área de memoria que comprende la Shared Pool contiene la “library cache”, “el data dictionary cache” y el “result cache”.

  • El “data dictionary cache” es una especie de metadatos de la base de datos, es en definitiva una colección de tablas y vistas que contienen información de la base de datos, sus estructuras y sus usuarios. Es una zona bastante accedida de la base de datos.
    Otra área es la “library cache”. Es sin duda otra zona bastante concurrida de la base de datos. Oracle representa cada sentencia SQL que se ejecuta con una zona SQL compartida, con lo que Oracle es capaz de reconocer cuando 2 usuarios ejecutan la misma sentencia, y así poder reutilizar la misma área para ambos usuarios. Esta zona de memoria compartida contiene el plan de ejecución, con lo que Oracle ahorra memoria utilizando la misma área para las sentencias que se ejecutan en múltiples ocasiones.
    En la “result cache” se almacenan filas y no bloques. En este área por ejemplo podemos guardar listas de valores muy utilizadas. Para ello tendremos que definir un tipo de Hint especial en nuestras consultas que hagan que los resultados obtenidos se almacenen en esta cache.
  • Redo Log Buffer: contiene un registro de todas las transacciones dentro de la base, las cuales se almacenan en el respectivo archivo de Redo y en caso de siniestro se vuelven a ejecutar aquellos cambios que aún no se hayan reflejado en el archivo de datos (commit).
  • Large Pool: espacio adicional, generalmente usado en casos de multithreading y esclavos de I/O.Esta zona es opcional. El administrador del sistema puede configurarla siempre que quiera reservar memoria para realizar operaciones de backup o recuperación de la base de datos o consultas en paralelo.
  • Java Pool: usado principalmente para almacenar objetos Java.La memoria java pool es usada en la memoria del servidor para todas las sesiones que utilicen código java y datos en la JVM. Esta memoria es usada de diferentes maneras dependiendo del modo en el que la base de datos esté corriendo.


instancia de Oracle

Es el conjunto de procesos del servidor que permiten el acceso a la base de datos. Es un conjunto de estructuras de datos y procesos en memoria. Está formado por: 
SGAArea global de sistema. Se trata de la zona de memoria común para todos los procesos de servidor, contien las siguientes estructuras de datos fundamentales:
  •  Buffer de caché de base de datos. Almacena bloques de datos leídos de la base de datos a fin de que las próximas consultas no necesiten acudir a disco y se las pueda servir de estos datos en la caché.
  • Buffer redo log. Estructura que almacena los datos anteriores y posteriores a cada instrucción y así facilitar tanto su anulación, como su realización en caso de problemas. 
  •  Large pool. Área de la memoria que proporciona espacio para los datos necesarios para realizar operaciones de backup y restauración, así como los datos de sesión y otros que permitan aliviar el trabajo de la instancia.
  • Shared pool. Consta de la caché del diccionario de datos y de la caché de instrucciones SQL, PL/SQL. De esa forma se acelera la ejecución de consultas e instrucciones que utilicen los mismos metadatos o bien que se traten de instrucciones parecidas a otras anteriormente ejecutadas. 
         - Cache Library.
           -Data Dictionary Cache
  • Java Pool. Sólo se usa si hemos instalado Java para agilizar el proceso de las instrucciones en ese lenguaje.
Archivos 
  • Control (ctl): almacenan información acerca de la estructura de archivos de la base.
  • Rollback (rbs): cuando se modifica el valor de alguna tupla en una transacción, los valores nuevos y anteriores se almacenan en un archivo, de modo que si ocurre algún error, se puede regresar (rollback) a un estado anterior.
  • Redo (rdo): bitácora de toda transacción, en muchos dbms incluye todo tipo de consulta incluyendo aquellas que no modifican los datos.
  • Datos (dbf): el tipo más común, almacena la información que es accesada en la base de datos.
  • Indices (dbf) (dbi): archivos hermanos de los datos para acceso rápido.
  • Temp (tmp): localidades en disco dedicadas a operaciones de ordenamiento o alguna actividad particular que requiera espacio temporal adicional.

miércoles, 14 de marzo de 2018

Memoria de una base de datos


Buffer Cache (o Database Buffer Cache)

Su función es mantener bloques de datos más recientemente leídos directamente de los archivos de datos, esto se hace para un mejor desempeño pues si los datos son de nuevo requeridos por un usuario, su acceso es más rápido.

Cuando se procesa una consulta, el servidor busca los bloques de datos requeridos en esta estructura. Si el bloque no se encuentra en esta estructura, el proceso servidor lee el bloque de la memoria secundaria y coloca una copia en esta estructura. De esta forma, otras peticiones que requieran de este bloque de datos no requerirán de acceso a memoria secundaria (lecturas físicas).

Los bloques pueden contener datos modificados que no son permanentemente escritos a disco y los cuales maneja Oracle de una manera consistente para atender la concurrencia de los usuarios conectados a la base de datos, dichos usuarios comparten el acceso a esta área. Los bloques modificados se llamas bloques sucios.


Área de SQL Compartido, Shared SQL Pool

En esta zona se encuentran las sentencias SQL que han sido analizadas. El análisis sintáctico de las sentencias SQL lleva su tiempo y Oracle mantiene las estructuras asociadas a cada sentencia SQL analizada durante el tiempo que pueda para ver si puede reutilizarlas.

Antes de analizar una sentencia SQL, Oracle mira a ver si encuentra otra sentencia exactamente igual en la zona de SQL compartido. Si es así, no la analiza y pasa directamente a ejecutar la que mantiene en memoria. De esta manera se premia la uniformidad en la programación de las aplicaciones. La igualdad se entiende que es lexicográfica, espacios en blanco y variables incluidas.

La base de datos Oracle asigna memoria a la shared pool cuando una nueva instrucción sql se analiza. El tamaño de esta memoria depende de la complejidad de la instrucción. Si toda la shared pool ya ha sido asignada la base de datos Oracle puede liberar elementos de la shared pool hasta que haya suficiente espacio libre para nuevas sentencias. Al liberar un elemento de la shared pool el sql asociado debe ser recompilado y reasignado a otra área de sql compartida la próxima vez que se ejecute.

El contenido de la zona de SQL compartido es:
  • Las sentencias SQL y PL/SQL (texto de la sentencia)
  • Plan de ejecución de la sentencia SQL.
  • Lista de objetos referenciados.

Large Pool

El administrador de la base de datos puede configurar esta área de memoria opcional, para proveer localidades más amplias de memoria para:
  • Memoria de sesiones.
  • Procesos de I/O del servidor
  • Backups de la base de datos y operaciones de recuperación.
Al asignar espacios dentro de large pool para un servidor compartido, Oracle puede usar la shared pool principalmente para guardar en caché las sentencias compartidas de sql y evitar la sobrecarga causada por la disminución de la caché de sql compartida. Además la memoria para backup y operaciones de recuperación y para procesos de I/O del servidor es asignada en buffers de algunos cientos de kilobytes, por lo que la large pool mucho más capaz de satisfacer dicha demanda de memoria que la shared pool.

Java Pool

La memoria java pool es usada en la memoria del servidor para todas las sesiones que utilicen código java y datos en la JVM. Esta memoria es usada de diferentes maneras dependiendo del modo en el que la base de datos esté corriendo.

Algunas de las cuales son:
  • Análisis sintáctico de código y scripts en Java.
  • Tareas de instalación relacionada con aplicaciones Java.
  • Procedimientos almacenados de código Java.
La Java Pool utiliza el algoritmo LRU (Least-Recently-Used), el cual se encarga de mantener en memoria el código Java que se utiliza con mayor frecuencia.

miércoles, 7 de marzo de 2018

Arquitectura de un sistema gestor de bases de datos

Componentes
Un  sistema  de  bases  de  datos  se  divide  en  módulos  que se  encargan  de  cada  una  de  las  responsabilidades  del  sistema  completo.

Los componentes funcionales de un sistema de bases de datos se pueden dividir a grandes rasgos en:

Usuarios

  • Normales: Usuarios que no requieren preparación especial en el manejo de base de datos y que utilizan el sistema a través de programas de aplicación que han sido escritos para ellos.
  • Programadores de aplicaciones: Usuarios de la base de datos y escriben programas de aplicación. Pueden llegar a utilizar herramientas DRA (Desarrollo Rápido de Aplicaciones), con las que pueden crear formularios e informes con poco esfuerzo de programación.
  • Sofisticados: Son quienes utilizan la base de datos a través de consultas escritas en un lenguaje de consultas.
  • DBA: Su función es administrar la base de datos por lo tanto tiene acceso total.

Componentes de procesamiento de consultas
  • Compilador de LMD: Traduce las instrucciones del LMD en lenguaje de consultas a instrucciones a bajo nivel que entiende el motor de evaluación de consultas.
  • Precompilador del LMD incorporado: Convierte las instrucciones de LMD incorporadas en un programa de aplicación en llamadas a procedimientos normales en el lenguaje anfitrión.
  • Intérprete del LDD: Interpreta las instrucciones del LDD y las registra en un conjunto de tablas que contiene metadatos.
  • Motor de evaluación de consultas: Ejecuta las instrucciones a bajo nivel generadas por el compilador del LMD.

Componentes de gestión de almacenamiento
  • Gestor de autorización e integridad: Comprueba que se satisfagan las ligaduras de integridad y la autorización de los usuarios para acceder a los datos.
  • Gestor de transacciones: Asegura que la base de datos quede en un estado consistente a pesar de los fallos del sistema, y que las ejecuciones de transacciones concurrentes ocurran sin conflicto.
  • Gestor de archivos: Gestiona la reserva de espacio de almacenamiento de disco, y las estructuras de datos usadas para representar la información almacenada en disco.
  • Gestor de memoria intermedia: Es responsable de traer los datos del disco de almacenamiento a memoria principal y decidir qué datos tratar en la memoria caché.

Almacenamiento en disco
  • Diccionario de datos: Que contiene información sobre los datos y es un tipo especial de tabla a la que solo tiene acceso el sistema de base de datos y no los usuarios en general. 
  • Diccionario de datos: Almacena entre otros datos, restricciones de seguridad e integridad.
  • Indices: Que se utilizan para buscar más rápidamente un registro. Estos, junto con los datos estadísticos son archivos que son almacenados en disco.

lunes, 5 de marzo de 2018

Ejemplo de armando en Emu8086 y Turbo Assambler

;emu
org 100h

.data
    mensaje db "Programa que utiliza loop e imprime del 0 al 9",13,10,"$"

.code 
inicio:
    mov ax,@data
    mov ds, ax
    mov dx,offset mensaje
    mov ah,09h
    int 21h

MOV DL, "0";se transfiere la letra 0 al registro de datos en el byte bajo
MOV CX, 10;se transfiere 10 al registro contador
PRINT_LOOP:;va a imprimir hasta acabar las 26 interaciones
MOV AH, 02;se transifiere 02 al acumulador de byte alto
INT 21h; se realiza la interrupcion del dato ascii leido desde el teclado
INC DL;siguiente caracter numerico
LOOP PRINT_LOOP;continua hasta acabar las 10 vueltas

ret



;Turbo

.model small
.stack 64

datos segment
    mensaje db "Programa que utiliza loop e imprime del 0 al 9",13,10,"$"
datos ends

codigo segment
  assume cs:codigo, ds:datos
inicio:
    mov ax,@data
    mov ds, ax
    mov dx,offset mensaje
    mov ah,09h
    int 21h

MOV DL, "0";se transfiere la letra 0 al registro de datos en el byte bajo
MOV CX, 10;se transfiere 10 al registro contador
PRINT_LOOP:;va a imprimir hasta acabar las 26 interaciones
MOV AH, 02;se transifiere 02 al acumulador de byte alto
INT 21h; se realiza la interrupcion del dato ascii leido desde el teclado
INC DL;siguiente caracter numerico
LOOP PRINT_LOOP;continua hasta acabar las 10 vueltas  
codigo ends

end inicio

Programa propio de ciclos



Código:

;Programa de ciclo   
;David Orlando Maldonado Lopez 

org 100h

.model small
.stack 64
    
.data  
    mensaje db 0ah, 0dh, 'solo puede imprimir el mensaje de 1-3 veces$'
    mensaje1 db 0ah, 0dh, 'imprime mensaje 1 vez$'
    mensaje2 db 0ah, 0dh, 'imprime mensaje 2 veces$'
    mensaje3 db 0ah, 0dh, 'imprime mensaje 3 veces$'
    
.code

inicio:
   lea dx,mensaje   ;imprimir mensaje
 mov ah,9h
 int 21h
  mov ah,08              ;pausa y espera a que el usuario precione una tecla
 int 21h                ;interrupcion para capturar

 cmp al,49       
 je llamar1     
 cmp al,50        
 je llamar2  
 cmp al,51         
 je llamar3  
 jmp fin

fin:
 mov ax,4c00h       ;funcion que termina el programa
 int 21h

llamar1:
call uno

llamar2:
call dos

llamar3:
call tres



uno proc near
mov cx, 1
ciclo:
mov ax, @data
mov ds, ax
mov dx, offset mensaje1
mov ah, 09h
int 21h
loop ciclo
mov ah, 04ch
int 21h  
uno endp

dos proc near
mov cx, 2
ciclo2:
mov ax, @data
mov ds, ax
mov dx, offset mensaje2
mov ah, 09h
int 21h
loop ciclo2
mov ah, 04ch
int 21h  
dos endp   

tres proc near
mov cx, 3
ciclo3:
mov ax, @data
mov ds, ax
mov dx, offset mensaje3
mov ah, 09h
int 21h
loop ciclo3
mov ah, 04ch
int 21h  
tres endp


end inicio

Capturas:


Practica en clase 1-Marzo-2018

Ciclos

Código:
;Programa de ciclo   
;David Orlando Maldonado Lopez 

org 100h

.model small
.stack 64
    
.data
    mensaje db 0ah, 0dh, 'imprime mensaje 5 veces$'

.code
inicio:
mov cx, 5
ciclo:
mov ax, @data
mov ds, ax
mov dx, offset mensaje
mov ah, 09h
int 21h
loop ciclo

mov ah, 04ch
int 21h


end inicio


Capturas: