Académique Documents
Professionnel Documents
Culture Documents
SGA (System Global Area): est formada por un conjunto de estructuras de memoria que
contienen datos e informacin de control de la instancia. La SGA es compartida por todos
los procesos servidores y por los procesos de respaldo.
PGA (Program Global Area): es un rea de memoria no compartida que contiene datos e
informacin de control exclusivamente de un proceso de Oracle. La PGA se crea cuando el
proceso de Oracle arranca. Existe una PGA por cada proceso servidor y por cada proceso de
respaldo.
El conjunto de todas las PGA recibe el nombre de PGA total de la instancia o PGA de la
instancia. Los parmetros de inicializacin determinan el tamao total de la instancia de la
PGA, no de las PGA individuales.
UGA (User Global Area): esta memoria est asociada a cada sesin del usuario.
rea de cdigo: son porciones de memoria utilizadas para almacenar cdigo que se est
ejecutando o que puede ejecutarse. El cdigo de Oracle se almacena en un rea de software
que generalmente se encuentra en una ubicacin diferente de la de los programas de usuario.
PGA
La PGA es una memoria especfica para un proceso o un hilo que se comparte con otros procesos o
hilos del sistema, por lo que nunca se guarda en la SGA.
La PGA es una pila de memoria que contiene variables dependientes de la sesin necesarias para un
proceso servidor, ya sea dedicado o compartido. Es el propio proceso servidor el que reserva las
estructuras de memoria que necesita la PGA.
Es posible utilizar los parmetros de inicializacin para establecer el tamao mximo objetivo de la
PGA de la instancia, de tal forma que las PGA individuales pueden crecer hasta alcanzar este
tamao mximo.
Componentes dela PGA
La PGA se subdivide en varias reas, cada una con un objetivo diferente . No todos los
componentes de la PGA existen en todos los casos.
rea de SQL privada
El rea de SQL privada mantiene informacin acerca de las sentencias SQL parseadas y otra
informacin de sesin especca. Cuando un proceso servidor ejecuta cdigo SQL o PL/SQL,
utiliza esta zona de memoria para guardar las variables asociadas, la informacin de estado de la
ejecucin de la consulta y las reas de trabajo de la ejecucin de la consulta.
No hay que confundir el rea de SQL privada, que est en la PGA, con el rea de SQL compartida,
que almacena los planes de ejecucin en la SGA. Varias reas de SQL privadas, en la misma o en
diferentes sesiones, pueden apuntar a un nico plan de ejecucin en la SGA. Las reas de SQL
privadas para cada ejecucin no son compartidas y pueden contener distintos valores e informacin.
Un cursor es un nombre o un manejador de un rea de SQL privada especfica. Puede pensarse en
un cursor como un puntero en la parte del cliente y un estado en la parte del servidor. Puesto que los
cursores estn asociados con las reas de SQL privadas, a veces los trminos son intercambiables.
Las reas de SQL privadas se dividen en las siguientes subreas:
Oracle llg gestiona los componentes de la SGA dinmicamente. La memoria de la SGA se asigna en
unidades contiguas de memoria llamadas grnulos, cuyo tamao depende del parmetro
MEMORY_MAX_TARGET. Si el valor de MEMORY_MAX_TARGET es mayor de 1.024 MB, el
tamao del grnulo puede ser 16 MB o 4 MB. LA asignacin mnima es de 3 grnulos, uno para
cada uno de los componentes obligatorios.
El tamao de los componentes de la SGA se obtiene de las vistas V$SGA y V$SGAINFO. Los
componentes que tienen en la columna RESIZABLE de esta ltima vista el valor Yes son los que se
pueden manejar dinmicamente.
A continuacin se introduce cada uno de los componentes de la SGA en detalle.
Database buffer cach
La database buffer cach es el rea de memoria que guarda las copias de los bloques de datos ledos
de los ficheros de datos. Sus principales funciones son las siguientes:
Optimizacin de la E/S fsica: la base de datos actualiza los bloques de datos de la cach y
guarda metadatos sobre los cambios en el buffer de redo log. Despus de un COMMIT, la
base de datos escribe los redo buffers en el disco, pero no escribe inmediatamente los
bloques de datos en disco. En su lugar, el DBWn lleva a cabo una escritura perezosa de los
mismos.
Mantener los bloques que son accedidos ms frecuentemente en la database buffer cach y
escribir los que se acceden con menos frecuencia en disco.
DIRTY: contienen bloques de datos que deben escribirse en los ficheros de datos, ya que se
corresponden con informacin que todava no se ha escrito en disco.
FREE: no contienen datos o pueden sobrescribirse. Cuando Oracle lee datos de disco, los
carga en estos buffers.
PINNED: son buffers que estn siendo utilizados o que deben retenerse explcitamente para
su futuro uso.
La base de datos emplea un sofisticado algoritmo para garantizar que el acceso a los buffers es
eficiente. Se utiliza el algoritmo LRU (Least Recently Used), que clasifica a los buffers en calientes
(es accedido frecuentemente y usado recientemente) y fros (no ha sido utilizado recientemente).
E/S del buffer
Una E/S lgica o E/S del buffer hace referencia a las lecturas y escrituras de buffers en la database
buffer cach. Cuando un buffer solicitado no est en memoria la base de datos lleva a cabo una E/S
fsica para copiar dicho buffer desde disco a memoria y despus hace una E/S lgica para leer la
database buffer cach.
El proceso DBWn efecta escrituras peridicas de los buffers fros en estado DIRTY a disco. Estas
escrituras se producen en las siguientes condiciones:
* Un proceso servidor no puede encontrar un buffer en estado CLEAN para leer nuevos
bloques en la database buffer cach.
A medida que los buffers se ensucian (DIRTY), el nmero de buffers libres disminuye. Si el
nmero de buffers disminuye por debajo del umbral interno, y se necesitan buffers FREE, el
proceso servidor le solicita al DBWn que escriba en disco.
La base de datos utiliza la lista LRU para determinar cules de los buffers DIRTY escribir.
Cuando los buffers DIRTY alcanzan el extremo fro de la lista LRU, la base de datos los
mueve a una cola de escritura y los saca de la lista. El DBWn escribe los bloques de la cola en
disco, utilizan escrituras multibloque si es posible. Este mecanismo evita que el final de la cola
LRU se obstruya con buffers DIRTY y permite que los buffers FREE que se encuentren se
puedan reutilizar.
* La base de datos debe avanzar el checkpoint, que es la posicin en el hilo de redo desde la
que comienza la recuperacin de la instancia. El checkpoint puede ocurrir explcitamente
(porque se fuerce con la sentencia adecuada) o implcitamente. Un checkpoint implcito se
produce, por ejemplo, cuando un espacio de tablas cambia al estado off-line o al estado de solo
lectura. En este caso, el DWBn escribe en disco los bloques de datos DIRTY que contengan
bloques de los cheros de datos implicados.
* Cada 3 segundos, independientemente del volumen de actividad.
En cuanto a la lectura, cuando el nmero de buffers FREE es bajo, la base de datos debe borrar
los buffers de la database buffer cach. La base de datos reutiliza y sobrescribe los buffers
FREE en funcin de sus necesidades. Si el buffer sobrescrito se necesita ms tarde, la base de
datos deber recuperarlo de disco.
Cuando a un proceso servidor le llega una peticin de un proceso cliente, busca en la database
buffer cache el buffer. Un cache hit ocurre si la base de datos encuentra el buffer en memoria. El
orden de bsqueda es el siguiente:
En general, el acceso a los datos a travs un cache hit es ms rpido que a travs de un cache miss.
La tasa de cache hit del buffer mide la frecuencia con la que la base de datos encuentra los bloques
solicitados en la database buffer cach sin necesidad de leerlo del disco. Una database buffer cach
bien ajustada tiene una tasa de cache hit del 90%.
Pool de buffers
Un pool de buffers es una coleccin de buffers. Para mejorar la gestin de la database buffer cach,
Oracle llg proporciona tres pools de buffers. Es posible asignar objetos del esquema especficos al
pool de buffer apropiado para controlar cmo caducan en la cach.
Los pools de buffers existentes son:
Pool DEFAULT: es donde se suelen cachear los bloques de datos. A menos que se
configuren los pools separados, ste es el nico pool que est disponible. Adems, es
obligatorio.
Pool KEEP: est pensado para los bloques que son accedidos con mayor frecuencia, pero
que han caducado en default pool por falta de espacio. El objetivo de este pool es retener los
objetos en memoria y evitar E/S. Si no se quiere que algunos datos caduquen en memoria,
con la sentencia ALTER TABLE puede indicarse explcitamente que los bloques de la tabla
se guarden en el pool Keep.
ALTER TABLE equipo STORAGE (BUFFER_POOL KEEP);
Pool RECYCLE: est pensado para los bloques que apenas se usan y su objetivo es evitar el
constuno innecesario de espacio en la cach.
Dimensionando adecuadamente el pool KEEP es posible mantener all los bloques frecuentemente
utilizados durante ms tiempo. El pool RECYCLE los borrar de memoria tan pronto como no se
necesiten.
Dimensionamiento de la database buffer cach
El tamao de la database table cach es crtico para las prestaciones. Debe ser lo suficientemente
grande como para albergar todos los bloques de datos utilizados frecuentemente, pero no tanto
como para que quepan aquellos que raramente se usan.
Una cach pequea supone una actividad de disco excesiva porque la cach se llena rpidamente y
el DBWn se ve forzado a guardar los bloques DIRTY en los ficheros de datos.
Una cach muy grande, en principio, no es malo, salvo que cause problemas de paginacin de
memoria virtual en el sistema operativo. Sin embargo, el arranque de la instancia se hace ms lento.
La mayora de las bases de datos trabajan con una database cach buffer de entre cientos de MB y
unos pocos GB.
El LGWR escribe las entradas de redo secuencialmente en el disco, mientras que el DBWn escribe
los bloques de datos en disco sin ningn tipo de orden. Estas escrituras dispersas tienden a ser
mucho ms lentas que las escrituras secuenciales. Puesto que el LWGR permite a los usuarios evitar
esperar a que el DBWn termine de escribir, la base de datos consigue unas mejores prestaciones.
SHARED POOL
El shared pool cachea distintos tipos de datos del programa que se aseguran durante el arranque de
la instancia. Se divide en varios componentes, los ms importantes son: Cach de librera, Cach del
diccionario de datos y Cach de resultados del servidor. Todas las estructuras de memoria del shared
pool se gestionan dinmicamente.
Cach de librera
La cach de librera es una pool de memoria compartida que almacena cdigo SQL y PL/SQL
ejecutable, en su forna parseada (p_code), y estructuras de control como los cerrojos. Cuando se
ejecuta una sentencia SQL, la base de datos intenta reutilizar el cdigo ejecutado con anterioridad.
Si existe una representacin parseada de una sentencia SQL en la cach de librera y sta puede
compartirse, la base de datos reutiliza el cdigo. Esto es lo que se conoce como parseado suave o
library cache hit. En caso contrario, la base de datos debe construir una versin ejecutable del
cdigo de la aplicacin (parseo duro o library cache miss).
SQL Areas
La base de datos representa cada sentencia SQL que se ejecuta en las siguientes reas de memoria:
Shared SQL Area: se utiliza para procesar la primera ocurrencia de una sentencia SQL. Es accesible
para todos los usuarios y contiene el rbol de parseo y el plan de ejecucin. Solo existe un rea SQL
compartida para una sentencia SQL.
Private SQL Area: (No nos referimos a la de la Shared Pool, que es solo para Servidor Compartico) cada sesin
que lanza una sentencia SQL tiene una Private SQL Area en su PGA. Cada usuario que enva la
misma sentencia tiene un rea SQL privada apuntando a la misma rea SQL compartida.
La base de datos automticamente determina cuando las aplicaciones envan sentencias SQL
similares para lo que utiliza tanto las sentencias lanzadas directamente por los usuarios y las
aplicaciones como las sentencias SQL recursivas lanzadas por otras sentencias.
Para ello, se llevan a cabo los siguientes pasos:
l. Comprueba el shared pool para ver si existe una Shared SQL Area para una sentencia
sintcticamente y semnticamente idntica:
Si existe una sentencia idntica, la base de datos utiliza la Shared SQL Area para la
ejecucin de las nuevas instancias de sentencias, reduciendo as el consumo de memoria.
Si no existe ninguna sentencia idntica, la base de datos asigna una nueva Shared SQL Area
en el shared pool.
En cualquier caso, el rea SQL privada del usuario apunta al rea SQL compartida que contiene
la sentencia y el plan de ejecucin.
2. Asigna una Private SQL Area en nombre de la sesin. La ubicacin del rea SQL privada ser la
PGA. (Salvo que sea servidor compartido, en ese caso la parte del rea SQL Privada se mantiene en
la SGA).
Por tanto dos sesiones, que significan dos procesos cliente y dos procesos servidor, pueden lanzar la
misma consulta. El primero provoca que se aloje una copia en su PGA, en el rea de SQL Privada y
al mismo tiempo en el rea SQL Compartida de la Shared Pool. Cuando el segundo landa la misma
consulta, esta ya est en la Shared Pool.
Shared PL/SQL Areas
La cach de librera mantiene todas las formas ejecutables de los programas PL/SQL y las clases
JAVA. Estos elementos se denominan colectivamente unidades de programa y se procesan de forma
similar a las sentencias SQL.
Los procedimientos, funciones, definiciones de tipo de objetos y disparadores se guardan en el
diccionario de datos, tanto en cdigo como compilados. Cuando se invoca un objeto PL/SQL, se lee
del diccionario de datos y se guarda en el rea PL/SQL, de modo que si otra sesin los necesitase ya
se encontrarn en cach. Esto no ocurre con los bloques annimos, que se compilan dinmicamente.
La base de datos procesa las sentencias SQL individuales embebidas dentro de un programa
PL/SQL de la misma manera.
Se puede utilizar la sentencia ALTER SYSTEM FLUSH SHARED POOL para borrar manualmente
el shared pool para verificar las prestaciones que pueden esperarse despus de reiniciar la instancia.
La memoria en el shared pool se asigna segn un algoritmo LRU: cuando Oracle necesite espacio,
sobrescribir el objeto que haya estado ms tiempo sin usarse.
Cach del diccionario de datos
El diccionario de datos es una coleccin de tablas y vistas que contiene informacin de referencia
sobre la base de datos, sus estructuras y sus usuarios. Oracle accede al diccionario de datos
frecuentemente durante el parseo de las sentencias SQL.
Todos los procesos servidores comparten estas cachs para acceder a la infonnacin del diccionario
de datos y reducir el tiempo de parseo.
Pool reservado
El pool reservado es una zona de memoria en la memoria compartida que Oracle puede utilizar para
albergar grandes porciones de memoria contigua.
La asignacin de memoria del Shared Pool se lleva a cabo a trozos o chunks. Esta fragmentacin
permite que objetos grandes (ms de 5 kB) se carguen en la cach sin necesidad de solicitar una
nica zona de memoria contigua. De esta manera, la base de datos reduce la posibilidad de
quedarse sin memoria contigua debido a la fragmentacin.
SGA FIJA
La SGA fija es un rea intema de tareas de mantenimiento. Por ejemplo, contiene:
l. Informacin general sobre el estado de la base de datos y de la instancia a la que los procesos de
respaldo necesitan acceder.
2. Informacin comunicada entre procesos.
El tamao de la SGA fija no se puede cambiar manualmente y puede cambiar entre versiones.
GESTION DE MEMORIA
La gestin de memoria implica el mantenimiento de los tamaos ptimos de la estructura de
memoria de Oracle en funcin de los requisitos de la base de datos en cada momento. Oracle
gestiona la memoria basndose en los parmetros de inicializacin.
Las 5 opciones posibles son:
Gestin automtica de memoria (PGA y SGA)
Gestin automtica de SGA con dos opciones: Automtica de PGA o manual de PGA.
Gestin manual de SGA con las dos posibles opciones anteriores.
Gestin dela SGA
La SGA contiene varias estructuras de memoria que se dimensionan de manera independiente:
Shared pool.
Database buffer cach.
Large pool.
Streams pool.
Java pool.
Log buffer.
Como regla general, la asignacin de memoria para el Large pool, el Java pool y el Streams pool no
es negociable. Si estas estructuras estn infradimensionadas, habr errores. Si, por el contrario,
estn sobredimensionadas, no habr mejoras en las prestaciones.
La asignacin de memoria al Shared pool, Database buffer cach y Log buffer es negociable: si es
menor que el valor ptimo, no habr errores, pero disminuirn las prestaciones.
No hay que malgastar memoria innecesariamente. Un shared pool o log buffer sobredimensionados
pueden daar gravemente las prestaciones. Una database buffer cach demasiado grande es menos
problemtico, salvo que sea tan grande que obligue al sistema a realizar demasiados procesos de
intercambio y paginacin de memoria.
Existen dos opciones a la hora de gestionar la SGA:
Gestin automtica de la memoria compartida (ASMM): la base de datos ajusta la SGA a un
tamao objetivo (TARGET) y ajusta as mismo los componentes de la SGA para alcanzar
dicho tamao.
El DBA establece el tamao total de la SGA (SGA_TARGET) y la instancia dividir ese valor
total entre varias estructuras, asegurando que no se producen errores. Se ajustar el tamao de
los componentes de la SGA bajo demanda, para que si un componente necesita ms memoria
pueda ocupar la de otro componente que en ese momento no la est utilizando. El log bufffer
es el nico componente de la SGA al que se le fija un tamao (LOG_BUFFER) durante el
arranque de la instancia y que no puede gestionarse automticamente.
big integer 0
memory_target
GESTIN DE LA PGA
Una sesin de usuario es un proceso de usuario conectado a un proceso servidor. El proceso de
usuario genera sentencias SQL y las enva al proceso servidor para su ejecucin. Asociado con el
proceso servidor hay un bloque de memoria no compartida: la PGA. Cuando se ejecuta SQL, el
proceso servidor utiliza la PGA para almacenar datos especficos de la sesin, entre los que se
encuentran:
Tablas temporales.
Filas ordenadas.
Mezclas de mapas de bits.
Variables.
Pila.
Para algunos datos de la PGA, la utilizacin de memoria no es negociable. Por ejemplo si la sesin
necesita ms memoria para la pila de llamadas, sta deber estar disponible. Para otras estructuras
(como el almacenamiento de tablas temporales), el empleo de la PGA no es esencial, pero, si es
necesario que los datos se escriban en disco, las prestaciones disminuirn.
Toda sentencia SQL utiliza la memoria de la SGA (ms concretamente, la Shared SQL Area del
shared pool), pero tambin requerir una parte de la PGA (Private SQL Area) sin la cual no puede
ejecutarse. Aumentar la PGA suele tener como consecuencia una reduccin del tiempo de ejecucin,
aunque esta reduccin no es lineal. Generalmente, hay tres etapas en la asignacin de memoria:
Por ejemplo, supongamos una operacin de ordenacin. Si la asignacin ptima no est disponible,
ser necesario dividir las filas en lotes, cada uno de los cuales ser ledo, ordenado y escrito en
disco para luego ser mezclados los resultados parciales de cada lote con el fin de conseguir el
resultado final.
La situacin ideal es que todas las sentencias SQL se ejecuten de manera ptima, pero,
desgraciadamente, es un objetivo imposible de alcanzar.
Oracle recomienda la gestin automtica de la PGA, que consiste en establecer un objetivo para la
memoria de PGA total (PGA_AGGREGATE_TARGET). Cuando una sesin ha terminado de
ejecutar su sentencia, la PGA que estaba utilizando podr asignarse a otra sesin. Este sistema se
basa en el hecho de que, en cualquier momento, solo habr conectadas un cierto nmero de sesiones
que necesitarn una PGA negociable, aunque es cierto que necesitarn una cierta cantidad de PGA
para mantener el estado de la sesin, aunque sta est inactiva.
En ocasiones, resulta imposible conseguir las asignaciones de memoria ptimas porque los
requisitos pueden ser enormes. Las ejecuciones one-pass son perjudiciales y deben evitarse. Las
ejecuciones multipass son desastrosas y, si ocurren, es recomendable ajustar el hardware y las
sentencias SQL.
La gestin automtica de la memoria PGA se basa en dos parmetros:
PGA
Descripcin
Parmetros
Auto
N/A
N/A
MEMORY_TARGET
MEMORY_MAX_TARGET
N/A
Auto
Auto
SGA_TARGET
SGA_MAX_SIZE
PGA_AGGREGATE_TARGET
N/A
Auto
SGA_TARGET
SGA_MAX_SIZE
SHARED_POOL_SIZE
DB_CACHE_SIZE
LARGE_POOL_SIZE
JAVA_POOL_SIZE
STREAMS_POOL_SIZE
PGA_AGGREGATE_TARGET
N/A
Manual Auto
N/A
SHARED_POOL_SIZE
DB_CACHE_SIZE
LARGE_POOL_SIZE
JAVA_POOL_SIZE
STREAMS_POOL_SIZE
Parmetros de reas de trabajo PGA
como:
SORT_AREA_SIZE
HASH_AREA_SIZE
BITMAP_MERGE_AREA_SIZE
Los advisor no se habilitarn, salvo que el parmetro STATISTIS_LEVEL tenga el valor TYPICAL
o ALL.
SQL*Plus: Release 11.2.0.2.0 Production on Dom Sep 22 09:42:37
2013
Copyright (c) 1982, 2010, Oracle.
PRACTICAS:
DATABASE_STATUS
ACTIVE