lunes, 19 de marzo de 2012

¿Qué es un SGA de Oracle?

Arquitectura de ORACLE

La arquitectura de ORACLE tiene tres componentes basicos: la estructuras de memoria para almacenar los datos y el codigo ejecutable, los procesos que corren el sistema de bases de datos y las tareas de cada usuario conectado a la base de datos y los archivos que sirven para el almacenamiento fisico, en disco, de la informacion de la base de datos.








SGA (Área Global del Sistema) es una estructura básica de memoria de Oracle que sirve para facilitar la transferencia de información entre usuarios y también almacena la información estructural de la BD más frecuentemente requerida.
El área global del sistema y un conjunto de procesos de la base de datos constituyen una instancia de una base de datos Oracle. La base de datos Oracle automáticamente reserva memoria para el área global del sistema cuando se inicia una instancia, y el sistema operativo reclama la memoria cuando se apaga dicha instancia. Cada instancia tiene su propia SGA.

¿Que contiene el SGA?
Memoria Oracle (SGA) Su tamaño está determinado por los parámetros:
    • Shared_Pool_Size= Tamaño en bytes del área para SQL compartidos y sentencias PL/SQL.
    • Db_Block_Size = Tamaño en bytes de un solo bloque de datos.
    • Db_Block_Buffers = Numero de Buffers a localizar en memoria.
    • Log_Buffer = Numero de bytes localizados para los Redo Log Buffer.


La SGA se divide en varias partes:

Buffers de BD, Database Buffer Cache
    Es el caché que almacena los bloques de datos leidos de los segmentos de datos de la BD, tales como tablas, índices y clusters. Los bloques modificados se llamas bloques sucios. El tamaño de buffer caché se fija por el parámetro DB_BLOCK_BUFFERS del fichero init.ora.
    Como el tamaño del buffer suele ser pequeño para almacenar todos los bloques de datos leidos, su gestión se hace mediante el algoritmo LRU.



Buffer Redo Log
    Los registros Redo describen los cámbios realizados en la BD y son escritos en los ficheros redo log para que puedan ser utilizados en las operaciones de recuperación hacia adelante, roll-forward, durante las recuperaciones de la BD. Pero antes de ser escritos en los ficheros redo log son escritos en un caché de la SGA llamado redo log buffer. El servidor escribe periódicamente los registrosredo log en los ficheros redo log.
    El tamaño del buffer redo log se fija por el parámetro LOG_BUFFER.

Área de SQL Compartido, Shared SQL Pool
    En esta zona se encuentran las sentencias SQL que han sido analizadas. El analisis 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 mantinene en memoria. De esta manera se premia la uniformidad en la programación de las aplicaciones. La igualdad se entiende que es lexicografica, espacios en blanco y variables incluidas. El contenido de la zona de SQL compartido es:
    • Plan de ejecución de la sentencia SQL.
    • Texto de la sentencia.
    • Lista de objetos referenciados.
    Los pasos de procesamiento de cada petición de análisis de una sentencia SQL son:
    • Comprobar si la sentencia se encuentra en el área compartida.
    • Comprobar si los objetos referenciados son los mismos.
    • Comprobar si el usuario tiene acceso a los objetos referenciados.
    Si no, la sentencia es nueva, se analiza y los datos de análisis se almacenan en la zona de SQL compartida.
    También se almacena en la zona de SQL compartido el caché del diccionario. La información sobre los objetos de la BD se encuentra almacenada en las tablas del diccionario. Cuando esta información se necesita, se leen las tablas del diccionario y su información se guarda en el caché del diccionario de la SGA.
    Este caché también se administra mediante el algoritmo LRU. El tamaño del caché está gestionado internamente por el servidor, pero es parte del shared pool, cuyo manaño viene determinado por el parámetro SHARED_POOL_SIZE.

Procesos que acceden al SGA

Procesos de primer plano
  • Verificación de permisos de usuario
  • Elaboración del plan de ejecución para las sentencias
  • Recuperación de datos de la caché
  • Recuperación en caso de fallos
  • Bloqueos


Procesos de Segundo plano

A diferencia de los procesos de primer plano, los procesos de Segundo plano viven desde que la base de datos se inicia hasta que ésta es apagada.

Procesos de segundo plano
  • Database Writer
  • Log Writer
  • Archiver
  • Procesos de Checkpoint


System Monitor, SMON
    El SMON es el supervisor del sistema y se encarga de todas las recuperaciones que sean necesarias durante el arranque. Esto puede ser necesario si la BD se paró inesperadamente por fallo físico, lógico u otras causas. Este proceso realiza la recuperación de la instancia de BD a partir de los ficheros redo log. Además límpia los segmentos temporales no utilizados y compacta los huecos libres contiguos en los ficheros de datos. Este proceso se despierta regularmente para comprobar si debe intervenir.
Process Monitor, PMON
    Este proceso restaura las transacciones no validadas de los procesos de usuario que abortan, liberando los bloqueos y los recursos de la SGA. Asume la identidad del usuario que ha fallado, liberando todos los recursos de la BD que estuviera utilizando, y anula la transacción cancelada. Este proceso se despierta regularmente para comprobar si su intervención es necesaria.
Database Writer, DBWR
    El proceso DBWR es el responsable de gestionar el contenido de los buffers de datos y del caché del diccionario. Él lee los bloques de los ficheros de datos y los almacena en la SGA. Luego escribe en los ficheros de datos los bloques cuyo contenido ha variado. La escritura de los bloques a disco es diferida buscando mejorar la eficiencia de la E/S.
    Es el único proceso que puede escribir en la BD. Esto asegura la integridad. Se encarga de escribir los bloques de datos modificados por las transacciones, tomando la información del buffer de la BD cuando se valida una transacción. Cada validación no se lleva a la BD física de manera inmediata sino que los bloques de la BD modificados se vuelcan a los ficheros de datos periodicamente o cuando sucede algún checkpoint o punto de sincronizaión: grabación diferida:
    • Los bloques del buffer de la BD (bloques del segmento de rollback y bloques de datos) menos recientemente utilizados son volcados en el disco continuamente para dejar sitio a los nuevos bloques.
    • El bloque del segmento de rollback se escribe SIEMPRE antes que el correspondiente bloque de datos.
    • Múltiples transacciones pueden solapar los cambios en un sólo bloque antes de escribirlo en el disco.
    Mientras, para que se mantenga la integridad y coherencia de la BD, todas las operaciones se guardan en los ficheros de redo log. El proceso de escritura es asíncrono y puede realizar grabaciones multibloque para aumentar la velocidad.
Log Writer, LGWR
    El proceso LGWR es el encargado de escribir los registros redo log en los ficheros redo log. Los registros redo log siempre contienen el estado más reciente de la BD, ya que puede que el DBWR deba esperar para escribir los bloques modificados desde el buffer de datos a los ficheros de datos.
    Conviene tener en cuenta que el LGWR es el único proceso que escribe en los ficheros de redo log y el único que lee directamente los buffers de redo log durante el funcionamiento normal de la BD.
    Coloca la información de los redo log buffers en los ficheros de redo log. Los redo log buffers almacenan una copia de las transacciones que se llevan a cabo en la BD. Esto se produce:
    • a cada validación de transacción, y antes de que se comunique al proceso que todo ha ido bien,
    • cuando se llena el grupo de buffers de redo log
    • cuando el DBWR escribe buffers de datos modificados en disco.
    Así, aunque los ficheros de DB no se actualicen en ese instante con los buffers de BD, la operación queda guardada y se puede reproducir. Oracle no tiene que consumir sus recursos escribiendo el resultado de las modificaciones de los datos en los archivos de datos de manera inmediata. Esto se hace porque los registros de redo log casi siempre tendrán un tamaño menor que los bloques afectados por las modificaciones de una transacción, y por lo tanto el tiempo que emplea en guardarlos es menor que el que emplearía en almacenar los bloques sucios resultado de una transacción; que ya serán trasladados a los ficheros por el DBWR. El LGWR es un proceso único, para asegurar la integridad. Es asíncrono. Además permite las grabaciones multibloque.
Checkpoint, CKPT
    Este proceso escribe en los ficheros de control los checkpoints. Estos puntos de sincronización son referencias al estado coherente de todos los ficheros de la BD en un instante determinado, en un punto de sincronización. Esto significa que los bloques sucios de la BD se vuelcan a los ficheros de BD, asegurándose de que todos los bloques de datos modificados desde el último checkpoint se escriben realmente en los ficheros de datos y no sólo en los ficheros redo log; y que los ficheros de redo log también almacenan los registros de redo log hasta este instante. La secuencia de puntos de control se almacena en los ficheros de datos, redo log y control. Los checkpoints se produce cuando:
    • un espacio de tabla se pone inactivo, offline,
    • se llena el fichero de redo log activo,
    • se para la BD,
    • el número de bloques escritos en el redo log desde el último checkpoint alcanza el límite definido en el parámetro LOG_CHECKPOINT_INTERVAL,
    • cuando transcurra el número de segundos indicado por el parámetro LOG_CHECKPOINT_TIMEOUT desde el último checkpoint.
    Está activo si el parámetro CHECKPOINT_PROCESS tiene un valor verdadero.
Archiver, ARCH
    El proceso archivador tiene que ver con los ficheros redo log. Por defecto, estos ficheros se reutilizan de manera cíclica de modo que se van perdiendo los registros redo log que tienen una cierta antiguedad. Cuando la BD se ejecuta en modo ARCHIVELOG, antes de reutilizar un fichero redo log realiza una copia del mismo. De esta manera se mantiene una copia de todos los registros redo logpor si fueran necesarios para una recuperación. Este es el trabajo del proceso archivador.

Recoverer, RECO

    El proceso de recuperación está asociado al servidor distribuido. En un servidor distribuido los datos se encuentran repartidos en varias localizaciones físicas, y estas se han de mantener sincronizadas. Cuando una transacción distribuida se lleva a cabo puede que problemas en la red de comunicación haga que una de las localizaciones no aplique las modificaciones debidas. Esta transacción dudosadebe ser resuelta de algún modo, y esa es la tarea del proceso recuperador. Está activo si el parámetro DISTRIBUTED_TRANSACTIONS tiene un valor distinto de 0.

Lock, LCK

    El proceso de bloqueo está asociado al servidor en paralelo.
Procesos del Usuario


Cuando un usuario se conecta a la base de datos, se crea un proceso de usuario que se encarga de ejecutar el codigo de aplicacion y manejar el perfil del usuario con sus variables de ambiente. Los procesos de usuario no se pueden comunicar directamente con la base de datos, unicamente lo hacen a traves de procesos servidores.

Procesos Servidores

Ejecutan las ordenes SQL de los usuarios y llevan los datos al "database buffer cache", para que los procesos del usuario puedan tener acceso a los datos. Se pueden tener distintas arquitecturas para trabajar en ORACLE, segun los tipos de servidores: dedicados o multihilos.


No hay comentarios:

Publicar un comentario