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.
Está compuesto por:
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.
- 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.
- Shared SQL Pool (Área de SQL Compartido, )
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. El tamaño del caché está gestionado internamente por el servidor, pero es parte del shared pool, cuyo tamaño viene determinado por el parámetro SHARED_POOL_SIZE.
SGA SYSTEM GLOBL AREA
ResponderEliminarZona de memoria compartida, reservada al arrancar la instancia. Su tamaño es dinámico (>= 9i) y limitado por el parámetro SGA_MAX_SIZE.
SGA_TARGET (>=10g) fija el tamaño de la SGA y activa el reparto automático de su espacio entre: sga fija, shared pool, large pool, java pool, buffer caché y streams pool.
SGA SHARED POOL
ResponderEliminarLa forman por dos estructuras de memoria gestionadas por algoritmos LRU:
– Dictionary cache
– Library cache
En la Dictionary cache se guardan las definiciones de datos usadas más recientemente: database files, tablas, índices, columnas, usuarios, privilegios, etc. Esta información se genera y utiliza en la fase de análisis sintáctico (parse); y se obtiene de las tablas del diccionario de datos. Es como una caché de datos para el DD.
En la library cache se almacena información sobre las sentencias SQL y PL/SQL, usadas recientemente. Está formada por dos estructuras:
– Shared SQL área; se almacenan los planes de ejecución y los árboles sintácticos (parse tree) de las sentencias SQL.
– Shared PL/SQL área; contiene las unidades de programa compiladas y analizadas sintácticamente (parsed): procedures, functions, packages y triggers.
SGA DATA BASE BUFFER CACHE
ResponderEliminarAlmacena copias de los bloques de datos, extraídos de los ficheros de datos (data files); y está gestionado por un algoritmo LRU.
Cuando se procesa una query, el proceso servidor busca los bloques de datos en la Database Buffer Cache; si no los encuentra, los lee de los ficheros de datos y guarda una copia en la Database Buffer Cache.
Su tamaño depende del parámetro DB_CACHE_SIZE (desde 10g mejor usar sga_target, dejando db_cache_size a cero o un valor mínimo). Puede modificarse dinámicamente (sin sobrepasar sga_target (sga_max_size en 9i)):
ALTER SYSTEM SET DB_CACHE_SIZE = 96M;
SGA REDO LOG BUFFER CACHE
ResponderEliminarEs un buffer circular que registra todos los cambios hechos en los bloques de la caché de datos (incluidos datos en sí, índices y rollback), en lo que llamaremos “redo entries”. Su propósito principal es la recuperación de la instancia (no confundir con el “rollback”).
El tamaño viene determinado por el parámetro log_buffer (en bytes).
Las “redo entries” contienen la información necesaria (indices y rollback incluidos) para repetir los cambios hechos mediante insert, update, delete, create, alter o drop.
Los procesos servidores copian las entradas de redo en la Redo Log Buffer Cache (después de modificar los bloques en la cache de datos) ; y el proceso LGWR es el encargado de volcar dichos buffers al fichero redo log activo (en disco).
SGA LARGE POOL
ResponderEliminarEs un área de memoria de la SGA, a configurar sólo si se usa:
– Servidores compartidos (shared server o MTS)
– Recovery manager (RMAN)
– Parallel query
Con MTS, almacena información sobre las sesiones conectadas a través de servidores compartidos: UGA, I/O y operaciones de backup y recuperación.
No hace uso de algoritmo LRU para su gestión.
Su tamaño depende del parámetro large_pool_size (en bytes), del fichero de inicialización, que se puede modificar dinámicamente (sin que el tamaño total de la SGA sobrepase el parámetro sga_target (sga_max_size en 9i)):
ALTER SYSTEM SET LARGE_POOL_SIZE = 64M;
Desde 10g mejor usar sga_target, dejando large_pool_size a cero (o con un valor mínimo).
SGA JAVA POOL
ResponderEliminar• Es una zona de memoria, fuera de la SGA, reservada para cada proceso de usuario que se conecta a la BD.
• Se crea para cada nuevo proceso servidor (o un proceso background); y se libera cuando el proceso termina.
• En un entorno de servidores dedicados (dedicated server) contiene: sort area, información de sesión (privilegios de usuario y estadísticas de sesión), estado de los cursores (etapa del procesamiento de cada sentencia SQL que está usando actualmente la sesión), pila (stack space).
• Con servidores compartidos (MTS), parte de estas estructuras se guardan en la SGA. Si se activa la Large Pool se almacenan en ella, si no se quedan en la Shared Pool.
• PGA_AGGREGATE_TARGET (>=9i). Valor mínimo 10M, y default=20%SGA.. Vista V$PGASTAT. Tamaño = en OLTP RAM*0.80*0.20 (en DSS RAM*0.80*0.50). Activar: si es distinto de cero (junto a WORKAREA_SIZE_POLICY=AUTO). Habilita el uso de una zona de memoria compartida para las PGA, evitando la necesidad de asignar parámetros como SORT_AREA_SIZE o HASH_AREA_SIZE.
PGA: Program Global Area
ResponderEliminarEs una zona de memoria, fuera de la SGA, reservada para cada proceso de usuario que se conecta a la BD.
Se crea para cada nuevo proceso servidor (o un proceso background); y se libera cuando el proceso termina.
En un entorno de servidores dedicados (dedicated server) contiene: sort area, información de sesión (privilegios de usuario y estadísticas de sesión), estado de los cursores (etapa del procesamiento de cada sentencia SQL que está usando actualmente la sesión), pila (stack space).
Con servidores compartidos (MTS), parte de estas estructuras se guardan en la SGA. Si se activa la Large Pool se almacenan en ella, si no se quedan en la Shared Pool.
PGA_AGGREGATE_TARGET (>=9i). Valor mínimo 10M, y default=20%SGA.. Vista V$PGASTAT. Tamaño = RAM*0.80*0.20. Activar: si es distinto de cero (junto a WORKAREA_SIZE_POLICY=AUTO). Habilita el uso de una zona de memoria compartida para las PGA, evitando la necesidad de asignar parámetros como SORT_AREA_SIZE o HASH_AREA_SIZE.
PROCESOS
ResponderEliminarProcesos de usuario: se arranca uno cuando un usuario solicita una conexión a la BD. Establece la conexión con la BD pero no interactúa directamente con ella.
Procesos servidores: creado al establecer la conexión a la BD. Es el proceso que interactúa con la BD, para cada sesión. Puede ser dedicado o compartido. Uno dedicado sólo gestiona la peticiones de la sesión que lo inicia; uno compartido gestiona las peticiones de varios procesos de usuario.
Procesos background: disponibles cuando se arranca una instancia Oracle. Son los siguientes: DBWR, PMON, SMON, LGWR y CKPT; y nuevos en 10g: PSP0 (Process Spawner), MMAN (Memory Manager), MMON (Memory Monitor), MMNL (Memory Monitor Light). Opcionalmente podemos tener: ARCH, RECO, Dispatchers (Dnnn), Shared Servers (Snnn), etc. El parámetro BACKGROUND_DUMP_DEST, del fichero de inicialización, define el directorio donde se guardan los ficheros de traza de los procesos background
PROCESOS BACKGROUND DBWR
ResponderEliminarDBWR. Escribe los bloques de datos (y rollback) de la SGA (data buffer cache) en los ficheros de datos. Esto lo hace de forma asíncrona, cuando:
– Sucede un checkpoint.
– El número de buffers modificados alcanza un umbral.
– No quedan buffers libres.
– Ocurre un timeout.
– Ponemos un tablespace offline.
– Dejamos un tablespace en modo readonly.
– Borramos o “truncamos” una tabla.
Nota. Un checkpoint sucede cuando:
– El fichero redo log se llena al 90%.
– Se alcanza log_checkpoint_interval (bloques del SO).
– Se llega a log_checkpoint_timeout (en segundos).
Nombre del proceso: DBW0 a DBW9 y DBWa DBWj (máximo 20).
DB_WRITER_PROCESSES. Nº de procesos arrancados (valor por defecto = 1 ó CPU_COUNT/8, el mayor de ambos).