Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
SGA
Los trabajos de optimización de un gestor de base de datos Oracle pasan siempre por
el estudio de las tablas de estadísticas propias del motor. Estas tablas dan información
relativa a lo sucedido desde el último arranque, es decir, con cada reinicio de la
instancia de base de datos se vacían. Oracle utiliza dos estructuras de memoria
principales para su trabajo: el Área Global del Sistema, SGA (System Global Area o
también Shared Global Area) y el Área Global de Programa, (Program Global Area),
PGA. En la SGA Oracle guarda información sobre su estado de manera compartida. Está
disponible para todos los procesos, por eso se dice que está compartida. La SGA consta
del
Empezando por la SGA los valores a estudiar son: La cantidad de memoria libre en la
Shared Pool
SELECT *
FROM v$sgastat
WHERE name='free memory';
Cache Hit Ratio = 1 - (physical reads / (db block gets + consistent gets))
También con
PGA
La PGA, Program Global Area, es la zona de memoria de cada proceso Oracle. No está
compartida y contiene datos e información de control de un único proceso.
Área de ordenación
Resto de memoria privada del proceso
Table Scan. Las consultas pueden desencadenar operaciones de table scan, hay que
controlar que las operaciones de este tipo no deben ser full table scan, las más
pesadas.
En cualquier caso, las operaciones de este último tipo sobre tablas pequeñas, de
diccionario, no generan carga.
SELECT name,value FROM v$sysstat WHERE name LIKE '%table scans%'
Bloqueos. Una de las situaciones que más puede afectar al rendimiento de la base de
datos es la existencia de bloqueos en el servidor.
SELECT s.sid, s.serial#, p.spid FROM v$session s, v$process p WHERE s.paddr = p.addr
AND s.sid in (SELECT session_id FROM v$locked_object)
1. Objetivo:
Se muestra, a modo de ejemplo, una forma de distribuir la memoria del sistema en
una nueva instalación de ORACLE.
2. La memoria de ORACLE
El total disponible de memoria en un sistema tiene que estar configurado de forma
que todos los componentes de ese sistema funcionen óptimamente. Una pauta a
seguir para que el sistema quede bien configurado podría ser el siguiente:
Componentes del sistema Memoria del Sistema
Esta es la primera pauta que podemos seguir a la hora de reservar o ver la memoria
que se necesita o que se puede poner cómo máximo en un sistema para que Oracle
funcione correctamente y los demás componentes del sistema puedan hacerlo
también. (Habría que tener en cuenta también el número de usuarios que accederán
concurrentemente al sistema).
Una vez que hemos decidido que la SGA de nuestra base de datos ORACLE va a ser el
50\% de la memoria total del sistema. Esta memoria la tenemos que dividir entre los
componentes que la forman. (Database buffer cache, shared_pool_area, fixed size,
redo log buffer)
Componentes de la SGA Memoria SGA
Los 694 MB estarán disponibles para la PGA y todos los procesos servidores de Oracle.
Teniendo en cuenta que en el ejemplo hemos dicho que teníamos 100 sesiones
concurrentes nos daría un promedio de unos 7 Megas (aproximadamente) para el
consumo de cada usuario. (Tenemos que tener en cuenta que el SORT_AREA_SIZE
forma parte de la PGA) Por ultimo habría que distribuir la memoria que hemos dado a
la SGA entre todos sus componentes.
Componentes de la SGA Memoria asignada (en Mb)
Una vez dicho esto lo único que tenemos que saber es si el tamaño que tenemos
asignado es el que necesita nuestra BD, es decir si no la estamos sobredimensionando
o en cambio nos estamos quedando cortos.
88080384 ,5 71868416
176160768 1 0
211392512 1,2 0
246624256 1,4 0
281857024 1,6 0
317088768 1,8 0
352321536 2 0
528482304 3 0
704643072 4 0
1056964608 6 0
1409286144 8 0
Una vez conocido el valor adecuado (siempre que tengamos recursos suficientes),
modificamos el valor con (para probar):
Y para hacer el cambio definitivo (siempre y cuando estemos trabajando con spfile):
140 1 3527
175 1,25 3239
280 2 2893
Una vez conocido el valor adecuado (siempre que tengamos recursos suficientes),
modificamos el valor con (para probar):
Y para hacer el cambio definitivo (siempre y cuando estemos trabajando con spfile):
Las reducciones del SGA_TARGET se pueden hacer dinámicamente, pero para las
ampliaciones seguramente nos encontremos que el parámetro SGA_MAX_SIZE no nos
permita crecer más, será necesario para la BD y realizar la modificación con la BD
parada.
308 1 3563
616 2 3508
Una vez conocido el valor adecuado (siempre que tengamos recursos suficientes),
modificamos el valor con (para probar):
Y para hacer el cambio definitivo (siempre y cuando estemos trabajando con spfile):
Las reducciones del MEMORY_TARGET se pueden hacer dinámicamente, pero para las
ampliaciones seguramente nos encontremos que el parámetro
MEMORY_MAX_TARGET no nos permita crecer más, será necesario para la BD y
realizar la modificación con la BD parada.
¿Qué es un PGA de Oracle?
Es una estructura básica de memoria de Oracle que sirve para facilitar la transferencia
de información entre usuarios. Almacena la mayor parte de la información sobre la
propia estructura de la base de datos que es consultada con más frecuencia. Actúa de
forma similar a la caché de un PC. Si un usuario realiza una consulta SQL contra la base
de datos y ésta ya ha sido ejecutada por otro usuario, tal vez se encuentre almacenada
en la SGA, si es así, Oracle devolverá el resultado de la consulta SQL al segundo usuario
que la ha solicitado bastante más rápida pues no tendrá que leer de los archivos de
datos.
Lo mínimo que hay que saber para solucionar errores con la SGA de Oracle
Hay que tener en cuenta que la SGA es mucho más de lo que hay explicado aquí, pero
esto es una guía para solucionar problemas que pueden aparecer y entenderla de
manera más rápida
Definición:
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.
¿Qué tamaño dar a la SGA en un sistema nuevo o del que conocemos el número de
usuarios, procesos, etc…?
Oracle SGA Componentes –> 50% del total de la memoria del sistema.
Sistema operativo + Otros –> + o – 15% del total de la memoria del sistema.
Memoria de usuario –> + o – 35% del total de la memoria del sistema.
Esta es la primera pauta que podemos seguir a la hora de reservar o ver la memoria
que se necesita o que se puede poner cómo máximo en un sistema para que Oracle
funcione correctamente y los demás componentes del sistema puedan hacerlo
también. (Habría que tener en cuenta también el número de usuarios que accederán
concurrentemente al sistema).
Una vez que hemos decidido que la SGA de nuestra base de datos ORACLE va a ser el
50% de la memoria total del sistema. Esta memoria la tenemos que dividir entre los
componentes que la forman. (Database buffer cache, shared_pool_area, fixed size,
redo log buffer).
select * from ( select POOL, NAME, BYTES, BYTES/1048576 as MBytes from v$sgastat
where pool=’shared pool’ order by BYTES desc ) where rownum <= 25;
El campo “free memory” es el que indica el espacio libre en esos momentos. Para sacar
exactamente TOTALES de espacio de la SGA ocupado y libre, ejecutaremos la siguiente
sentencia:
Este error es fácil de solucionar siempre y cuando se tenga claro que es debido a que
falta espacio en la SGA, bien porque se ha quedado pequeña, se definió mal desde un
principio o porque está muy fragmentada.
Existe un comando que libera la SGA sin tener que parar la BBDD a partir de la versión
10 de Oracle. Este comando es el siguiente:
Ejemplo:
COUNT(*)
———-
828
System altered.
COUNT(*)
———-
18
También desde la version 10 de Oracle podemos modificar el tamaño en caliente. Se
haría de la siguiente manera:
SVRMGRL> alter system set shared_pool_size = 400M; SVRMGRL> alter system set
shared_pool_reserved_size = <15% de la shared_pool_size>;
- Parámetros “fijos”=> Son parámetros que una vez instalada la base de datos no se
pueden volver a modificar / configurar. El juego de caracteres es un claro ejemplo.
- Parámetros Dinámicos=> Son parámetros cuyo valor se puede cambiar sin necesidad
de cerrar la base de datos a diferencia de los estáticos.
Ejemplo:
Existe una manera sencilla de verificar que parámetros son dinámicos y cuales son
estáticos.
• Immediate
• Deferred
• False
Por ejemplo:
ISSYS_MODIFIABLE
—————————
IMMEDIATE
DEFERRED
FALSE
DEFERRED: los ajustes pueden ser realizados en “caliente” pero tomarán efecto solo
después de que la base de datos sea re-inicializada.
FALSE: obligatoriamente la base de datos debe bajarse para poder efectuar el cambio.
La siguiente sentencia nos permite conocer lo anterior mencionado:
1. Objetivo
Este documento pretende realizar una comparación entre estos dos parámetros de
ORACLE. (Disponibles los dos en Oracle 10g)
Tipo de
Estático
parámetro
Rango de
Mínimo : 0
valores
Máximo: depende del sistema operativo
sga_target:
Especifica el tamaño total para todos los componentes de la SGA. De esta forma las
siguientes áreas de memoria se configuran automáticamente. (Disponible a partir de la
versión 10).
Mínimo: 64
Rango de valores
Máximo: depende del sistema operativo