Академический Документы
Профессиональный Документы
Культура Документы
Estructuras de memoria
Oracle utiliza la memoria para almacenar la siguiente informacin:
Cdigo de programa.
Informacin sobre las sesiones conectadas aunque no estn activas.
Informacin necesaria durante la ejecucin de un programa.
Informacin compartida entre los procesos Oracle, por ejemplo la informacin sobre
bloqueos.
Datos cargados en memoria como los bloques de datos y las entradas de redo log.
Las estructuras de memoria bsicas asociadas con Oracle son las siguientes:
System Global Area (SGA): 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 (backgroud).
Program Global Area (PGA): es un rea de memoria no compartida que contiene
datos e informacin de control exclusivamente de un proceso Oracle. La PGA se crea
cuando el proceso Oracle arranca. Existe una PGA por cada proceso servidor y por
cada proceso de respaldo (background).
User Global Area (UGA): esta memoria est asociada a cada sesin del usuario.
reas de cdigo software: 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 aquella en la que se encuentran los programas de usuario.
Concepto de Instancia Oracle 1-3
Una parte de la SGA contiene informacin general sobre el estado de la base de datos y de la
instancia, tal como los procesos background que han de utilizarse. Este parte se denomina
Fixed SGA. En esta rea no hay datos de usuario almacenados. Adicionalmente, la SGA
mantiene informacin relativa a la comunicacin entre procesos tal como informacin sobre
bloqueos.
1-4 Concepto de Instancia Oracle
Tanto el Database Buffer Cache como la Shared Sql Area estn segmentadas de forma lgica
en mltiples partes con la finalidad de reducir la contencin en los entornos
multiprocesador.
Los buffers dentro de la cach estn organizados en dos listas:
Write List: almacena los bloques modificados (dirty blocks) que an no han sido
sincronizados a disco.
LRU (Least Recently Used) List: registra todos los bloques de datos clasificndolos en
calientes/hot buffer (accedidos recientemente) y fros/cold buffers (no utilizados
recientemente). Se utiliza este algoritmo para garantizar que el acceso a los bloques
es eficiente.
Conceptualmente, existe una sola lista LRU pero, por razones de concurrencia, la
instancia de base de datos utiliza varias.
Cuando un proceso Oracle necesita recuperar un dato lo busca en el Database Buffer Cache.
Si el proceso encuentra el dato en la cach (cache hit) este puede ser ledo directamente
desde la memoria y si no lo encuentra (cache miss), el bloque de datos que contiene la
informacin ha de ser copiado desde el disco a un buffer libre en la cach antes de ser
recuperado.
Antes de colocar un bloque de datos en la cache, el proceso Oracle ha de buscar un bloque
libre en la lista LRU. Si durante la bsqueda encuentra un dirty block en esta lista, lo mueve a
la Write List y contina buscando. Cuando el proceso encuentra un bloque libre, lee los datos
desde el disco colocndolos en el buffer y registra el bloque en la lista LRU, en concreto en la
zona MRU (Most Recently Used).
Si un proceso Oracle no encuentra un bloque libre, enva una seal al proceso background
DBW0 para que escriba los bloques modificados (dirty) a disco.
Una cach pequea supone una actividad de disco excesiva porque se llena rpidamente y el
proceso DBWn se ve forzado a guardar los dirty blocks en los ficheros de datos.
Library Cache
Es una zona de memoria compartida que incluye: reas compartidas de SQL (Shared SQL
Area), reas privadas de SQL (Private SQL Area) en el caso de configuracin de procesos
servidores compartidos, reas compartidas de PL/SQL (Shared PL/SQL Area) que almacenan
procedimientos y paquetes PL/SQL, y estructuras de control tales como latches. Administra
los datos mediante algoritmo LRU.
Cada sentencia SQL se ejecuta utilizando las reas SQL tanto compartida como privada. De
esta forma, cuando dos usuarios ejecutan la misma sentencia SQL, Oracle usa la misma zona
compartida para los dos usuarios. Sin embargo, cada usuario ha de tener una copia separada
de la sentencia en su rea privada SQL.
Cuando se ejecuta una sentencia SQL, Oracle intenta reutilizar el cdigo ejecutado con
anterioridad. Si existe la sentencia analizada (parseada) y almacenada en la Library Cache y
puede compartirse, Oracle reutiliza el cdigo.
La Library Cache dispone de zonas
Shared SQL Area: Un rea compartida SQL que contiene el anlisis (parse) y el plan de
ejecucin de cada sentencia SQL. De esta forma puede compartirse entre varios
usuarios accediendo al mismo cdigo. Oracle reserva memoria de la Shared Pool
cuando una nueva sentencia SQL es analizada para poder almacenarla en esta rea. El
tamao de esta rea depender de la complejidad de la sentencia.
Shared PL/SQL Area: El cdigo PL/SQL (procedimientos, funciones, paquetes y
triggers) son tratados al igual que las sentencias SQL. Oracle reserva un rea
compartida para analizar y compilar este cdigo. Adicionalmente se reserva un rea
privada para mantener valores especficos para la sesin que est ejecutando un
programa, incluyendo variables locales, globales y de paquete (instanciacin de
paquete) y buffers para ejecutar SQL. Si ms de usuario ejecuta la misma unidad de
programa lo har desde un rea compartida aunque mantenga su copia privada en su
rea privada SQL.
Concepto de Instancia Oracle 1-9
Result Cache
En Oracle11g se introdujo una caracterstica bastante innovadora denominada Result Cache,
la cual permite crear una porcin de memoria destinada a guardar aquellos datos que son
ms o menos estticos dentro de Oracle.
Esto permite consultar el valor final de un dato sin necesidad de acceder varias veces a disco,
ni pasar nuevamente por clculos o por grandes planes de ejecucin para resolver una
sentencia SQL.
Por ejemplo al lanzar una consulta mediante la sentencia SELECT COUNT(*) sobre una tabla
muy grande, se demorara varios minutos. Pues bien, al realizar esta consulta de nuevo,
como el resultado est almacenado en memoria se encuentra listo para ser reutilizado. Por
tanto la segunda consulta es rapidsima.
Se puede configurar de forma automtica (FORCE) o manual (MANUAL) mediante el
parmetro de inicializacin RESULT_CACHE_MODE.
A diferencia de los que ocurre con los otros pools, la cach de resultados (Result Cache)
mantiene los resultados y no los bloques de datos. Existen varias posibilidades de utilizacin
Query Result Cache y PL/SQL Function Result Cache.
Reserved Pool
El pool reservado (Reserved Pool) es una zona de memoria en Shared Pool Area que Oracle
puede utilizar para asignar grandes bloques contiguos de memoria.
La asignacin de memoria desde la Shared Pool Area se efecta en trozos o chunks. Esta
fragmentacin permite que objetos de gran tamao (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.
1-10 Concepto de Instancia Oracle
Es poco frecuente que Java, PL/SQL o cursores SQL puedan realizar asignaciones fuera de la
Shared Pool Area que sean mayores de 5 Kb. Para permitir que estas asignaciones se realicen
de manera ms eficiente, Oracle reserva una pequea cantidad de la Shared Pool para esta
funcionalidad.
Mediante el parmetro de inicializacin SHARED_POOL_RESERVED_SIZE se puede
configurar el tamao de este pool.
Large Pool
Opcionalmente se puede configurar dentro de la SGA un rea de memoria denominada
Large Pool. Esta zona soporta asignaciones de espacios de memoria adicionales para:
Memoria de sesin (UGA) para procesos servidores compartidos y Oracle XA
interface (utilizado cuando las transacciones interactan con ms de una base de
datos).
Buffers de mensajes utilizados en la ejecucin en paralelo de las sentencias.
E/S de procesos servidores.
Buffer para las operaciones de backup y restore de RMAN.
El uso de esta rea de memoria evita la contencin en la Shared Pool.
Este espacio es diferente del resto del espacio utilizado en la Shared Pool Area porque no
utiliza el algoritmo LRU. Los espacios de memoria se reservan y no se liberan hasta que no se
hayan terminado de utilizar. Tan pronto como se liberan hay otro proceso que las puede
utilizar.
El parmetro de inicializacin LARGE_POOL_SIZE (en bytes) permite dimensionar el espacio
de memoria dedicado a esta zona.
Java Pool
Es una zona de memoria utilizada por las sesiones especficas de cdigo Java y solo se
necesita si hay aplicaciones que ejecuten funciones Java (clases) almacenadas en la base de
datos. Acta de forma diferente dependiendo del modo en que est configurado el servidor
(dedicado o compartido).
Las estadsticas que recolecta el Java Pool Advisor proporcionan informacin sobre el uso de
memoria de la Library Cache por parte de Java y permite establecer cmo podran afectar a
Concepto de Instancia Oracle 1-11
la tasa de anlisis (parse) los cambios en el tamao del Pool de Java. Este asesor se activa
automticamente cuando se establece el parmetro STATISTICS_LEVEL a TYPICAL o ALL.
El parmetro de inicializacin JAVA_POOL_SIZE (en bytes) permite dimensionar el espacio
de memoria dedicado a este pool.
Streams Pool
Esta memoria es usada exclusivamente por los flujos (streams) de Oracle. Almacena colas de
mensajes y proporciona memoria a Oracle Streams para capturar y aplicar procesos. A
menos que se configure especficamente, el tamao de esta memoria est configurado a 0.
El tamao de la Streams Pool crece dinmicamente como sea necesario cuando los flujos de
Oracle son usados.
El tamao del Streams Pool est controlado por el parmetro STREAMS_POOL_SIZE.
1-12 Concepto de Instancia Oracle
informacin especfica de la sesin. Cada usuario que lanza la misma sentencia tiene su
propia rea SQL privada usando una nica rea SQL compartida. Por lo tanto muchas reas
SQL privadas pueden estar asociadas con la misma rea SQL compartida.
Un cursor es un manejador de un rea de SQL privado especfico. Como se muestra en la
siguiente figura, se puede pensar en un cursor como puntero en el proceso de usuario y
como un estado en el proceso servidor. Debido a que los cursores estn estrechamente
relacionados con las reas de SQL privadas, los trminos se utilizan a veces indistintamente.
El rea de SQL privado de un cursor est dividido, a su vez, en dos reas con diferentes
tiempos de vida:
rea persistente (Persistent Area) conteniendo, por ejemplo, informacin de las bind
variables. Solo se libera cuando se cierra el cursor.
rea de ejecucin (Run-time Area), que contiene informacin de estado sobre la
ejecucin de la sentencia y que se libera cuando la ejecucin ha terminado.
Oracle crea el rea Run-time como primer paso en la peticin de una ejecucin. Para las
sentencias INSERT, UPDATE y DELETE, Oracle libera el rea Run-time una vez que la
sentencia ha finalizado. Para las consultas, Oracle libera el rea Run-time una vez han sido
devueltas todas las filas o la consulta ha sido cancelada.
La distribucin de las reas privadas depende del tipo de conexin establecida en una sesin.
Si la sesin se conecta a travs de un proceso servidor dedicado, el rea SQL privada se
localizar en la PGA del proceso servidor. Sin embargo, si la sesin se conecta a travs de un
proceso servidor compartido, parte de su rea SQL privada se almacenar en la SGA.
Memoria de sesin
Memoria reservada por una sesin para almacenar sus variables (informacin de conexin) y
otra informacin relativa a la sesin. En caso de usar procesos servidores compartidos, la
memoria de sesin no ser privada.
1-14 Concepto de Instancia Oracle
Administracin de la memoria
La gestin de La memoria implica el mantenimiento de los tamaos ptimos de las
estructuras 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. Se
puede establecer el tamao de la memoria para los siguientes componentes:
Fixed SGA Area y otras zonas internas necesarias para la instancia Oracle.
Database Buffer Cache.
Buffer de Redo Log.
Shared Pool Area.
Java Pool.
Large Pool.
Streams Pool.
Buffers Cache Keep y Recycle.
Buffers Cache para los tamaos de bloque no estndar.
Parmetro SGA_TARGET
Usando el parmetro de inicializacin SGA_TARGET se puede especificar la cantidad total de
memoria SGA disponible para la instancia. De esta forma, Oracle distribuir este espacio a
travs de sus componentes asegurndose de un uso efectivo de la misma.
Al establecer la gestin automtica de memoria, los tamaos de los diferentes componentes
de la SGA son flexibles y pueden adaptarse a las necesidades en base a la carga de trabajo de
cada momento. Oracle distribuye automticamente la memoria disponible a travs de los
componentes segn stos lo requieran (bajo demanda).
De los distintos componentes de la SGA algunos permiten la gestin automtica completa y
otros han de ser establecidos manualmente.
Concepto de Instancia Oracle 1-17
Parmetro MEMORY_TARGET
El parmetro MEMORY_TARGET es una combinacin de los parmetros de inicializacin
SGA_TARGET y PGA_AGGREGATE_TARGET, y representa la cantidad total de memoria que
Oracle ha de repartir entre las distintas estructuras de memoria (SGA y PGA).
1-18 Concepto de Instancia Oracle
Parmetro MEMORY_MAX_TARGET
El parmetro MEMORY_MAX_TARGET permite establecer el valor lmite que se puede
utilizar para cambiar dinmicamente el valor de MEMORY_TARGET. As se puede ajustar la
cantidad total de memoria disponible para la base de datos como un todo, en cualquier
momento.
Estos dos parmetros no se pueden utilizar cuando se ha establecido el parmetro
LOCK_SGA a TRUE. Tampoco pueden ser utilizados conjuntamente con huge pages en Linux.
En algunas plataformas pueden ocurrir problemas cuando se establece la configuracin de
MEMORY_TARGET. Por ejemplo, en Linux se necesita tener asignado en /dev/shm (o su
equivalente) una cantidad de espacio ms grande que el valor que se desea establecer en el
parmetro MEMORY_TARGET. Si se no hace esto dar como resultado el siguiente mensaje
de error:
ORA-00845: MEMORY_TARGET not supported on this system
En este ejemplo, vemos que el aumento de tamao de la memoria en nuestra base de datos
no tendr un impacto positivo. Este tamao se encuentra representado en la columna
MEMORY_SIZE y es de 820MB (la situacin actual queda identificada si el valor de
MEMORY_SIZE_FACTOR es 1). Si se incrementa en un 25 por ciento, el tamao pasara a
1025MB (MEMORY_SIZE_FACTOR de 1,25) y slo dar lugar a un mnimo aumento en el
rendimiento como lo demuestra la diferencia en la columna de ESTD_DB_TIME de 74 a 73.
Vistas del diccionario de datos
Otra vista de diccionario, V$MEMORY_DYNAMIC_COMPONENTS, proporciona una visin
global de los diversos componentes de la memoria de la base de datos y de cmo Oracle
gestiona automticamente sus tamaos.
1-20 Concepto de Instancia Oracle
Estructuras de procesos
Todos los usuarios conectados a Oracle deben ejecutar dos mdulos de cdigo para acceder
a una instancia de base de datos:
La aplicacin o herramienta Oracle que permita lanzar sentencias SQL a una base de
datos.
El cdigo del servidor de base de datos Oracle para interpretar y procesar las
sentencias SQL.
Estos mdulos de cdigo se ejecutan a travs de procesos. Un proceso es un hilo de control
(mecanismo dentro de un sistema operativo que puede ejecutar una serie de tareas).
Habitualmente tiene su propia rea de memoria privada dentro de la que se ejecuta.
Cada proceso dentro de una instancia Oracle realiza una tarea concreta repartiendo la carga
de trabajo para permitir el uso de una instancia por parte de mltiples usuarios.
Los procesos en un sistema Oracle pueden clasificarse en dos grupos:
Procesos de usuario (user processes) que ejecutan el cdigo de la aplicacin o de la
herramienta Oracle.
Procesos Oracle (Oracle processes) que ejecutan el cdigo del servidor de base de
datos. En esta categora estn incluidos los procesos servidores (server processes) y
los procesos de respaldo en segundo plano (background processes).
La estructura de procesos vara de una configuracin Oracle a otra dependiendo del sistema
operativo y de las opciones de instalacin elegidas.
Concepto de Instancia Oracle 1-23
Procesos de usuario
Cuando un usuario ejecuta un programa de aplicacin o una herramienta Oracle, se genera
un proceso de usuario para atenderlo.
Los trminos conexin y sesin puede parecer similares pero hay algunas diferencias entre
ellos:
Una conexin es una va de comunicacin entre el proceso de usuario y la instancia
Oracle. Esta se establece utilizando mecanismos entre los procesos disponibles en el
servidor o a travs de software de red.
Una sesin es la conexin especfica de un usuario a una instancia Oracle a travs del
proceso servidor. El tiempo de vida de una sesin comprende desde el momento de
la conexin del usuario hasta que ste se desconecta.
1-24 Concepto de Instancia Oracle
Procesos Oracle
Los procesos Oracle son llamados por otros procesos para realizar funciones para dichos
procesos. Se pueden clasificar de la siguiente forma:
Procesos servidores
Oracle genera procesos servidores para gestionar las peticiones de los procesos de usuario
conectados a la instancia.
Los procesos servidores pueden realizar las siguientes tareas:
Analizar (parse) y ejecutar sentencias provenientes de la aplicacin o herramienta de
usuario.
Leer de los ficheros de datos los bloques de informacin necesarios para ser
almacenados en el buffer cach de la SGA si stos no estn en memoria.
Devolver los resultados de forma que la aplicacin pueda procesarlos.
Los procesos servidores pueden ser de dos tipos: dedicados (dedicated) y compartidos
(shared).
Procesos Servidores Dedicados
En esta configuracin se mantiene el ratio uno-a-uno entre el nmero de procesos de
usuario y el de procesos servidores. De esta forma si el proceso usuario est inactivo, el
proceso servidor tambin lo est.
Concepto de Instancia Oracle 1-25
Procesos background
Una instancia Oracle puede tener varios procesos de respaldo (background) pero no todos
son obligatorios, es decir no siempre van a estar todos presentes. La vista V$BGPROCESS
muestra informacin sobre ellos.
Los procesos background ms importantes de una instancia Oracle son los siguientes:
Database Writer Process (DBWn)
Log Writer Process (LGWR)
Checkpoint Process (CKPT)
System Monitor Process (SMON)
Process Monitor Process (PMON)
Manageability Monitor Process (MMON)
Recoverer Process (RECO)
Archiver Processes (ARCn)
Job Queue Processes (CJQ0 Y Jnnn)
Concepto de Instancia Oracle 1-27
grupo estn daados o el grupo no est disponible, el proceso LGWR no puede continuar
con su funcin.
Los cambios correspondientes a los bloques de datos se difieren hasta que resulte ms
eficiente escribirlos (mediante el proceso DBWn). A este mecanismo se le denomina
fast commit. La escritura de la entrada de Redo Log contiene el registro commit de la
transaccin, siendo el nico evento que determina que la transaccin ha sido validada
aunque los bloques de datos an no se hayan sincronizado.
Tambin puedes consultar los procesos background de la instancia desde una sesin de SQL
mediante la vista V$PROCESS del diccionario de datos de Oracle.
Concepto de Instancia Oracle 1-1