Ver el tamaño de SGA Sistema de area Global
SQL> show SGA;
Aumentar la SGA sistema de Area Global
El manejo inadecuado de la memoria (SGA y PGA) respectivamente, generará problemas de rendimiento en la base de datos.
La version 11G permite la asignación automática de estos parámetros desde la creación de la instancia, por experiencia recomiendo , no permitirle al motor manejarlo de esta manera (aunque Oracle lo vende como una mejora), ya que no se obtendrá el rendimiento esperado y el procentaje de perdida (PCT MISS) que es un indicador que muestra de que tan frecuente el motor encuentra los datos en cache , será muy alto. Hay que recordar que este PCT MISS debe ser lo mas cercano posible a 0, es decir que encuentra los datos en memoria y no tiene que ir al disco a recuperarlos.
Los siguientes parámetros permitiran la asignación de memoria en Forma Manual.
1. En el momento de creación de la instancia, el instalador indica si se va asignar la memoria automaticamente o se asignan los parametros de memoria, esto modifica PGA_AGGREGATE_TARGET y SGA_TARGET al asignarlos; automaticamente deshabilita la opción AUTOMATIC MEMORY MANAGEMENT, lo cual no quiere decir que si se asigna la administración automatica de memoria desde el inicio no se pueda deshabilitar despues de instalada la instancia.
Ahora, la SGA asigna la memoria de trabajo que es la utilizada al subir la base de datos. Esta área de trabajo asigna los siguientes buffers SHARED POOL, BUFFER CACHE, LARGE POOL Y JAVA POOL.
La administracion automatica de estas areas compartidas, puede llegar a ser ineficiente para algunos sistemas, por lo que es importante conocer como modificarla y asignarla adecuadamente,
Dependiendo de la cantidad de memoria RAM del sistema Operativo se realizan los calculos con el fin de no sobrepasar esta memoria y tener problemas en el momento de subir la base de datos.
Para nuestro Ejemplo vamos a realizar los cambios para un sistema con 32 GB en ram
Se asigna el siguiente parámetro SGA_MAX_SIZE, con el fin de asegurar que no se va a superar ese tome de asignación de SGA
ALTER SYSTEM SET SGA_MAX_SIZE = 16 G (Hay que dejar algo para el sistema Operativo)
y reiniciamos la instancia
luego, se modifica el parámetro SGA_TARGET = 0, de esta forma se le dice al motor que se van a asignar manualmente la memoria para los otros recursos mencionados.
ALTER SYSTEM SET SGA_TARGET=0, este parámetro y los que vienen a continuación son dinámicos y por consiguiente no es necesario reiniciar la instancia
ALTER SYSTEM SET DB_CACHE_SIZE = 10G
ALTER SYSTEM SET SHARED_POOL_SIZE= 4G
ALTER SYSTEM SET JAVA_POOL_SIZE = 1G
ALTER SYSTEM SET LARGE_POOL_SIZE = 1G
Con los valores anteriormente asignados, se espera obtener un mejor rendimiento en las consultas realizadas o lograr obtener un porcentaje de perdidas de busqueda en memoria de los datos cercanos a 0.
Es importante tener en cuenta durante la tarea de mejoramiento de performance (TUNNING), que los parámetros de memoria son solo una parte de toda la tarea y que en algunas ocasiones una de las soluciones es aumentar la memoria RAM y por consiguiente aumentar los valores anteriormente asignados.
Cambiar SGA
El valor interesante es "Total System Global Area". Este valor se puede ampliar mediante el parámetro: sga_max_size, de la siguiente forma (antes de hacerlo ten en cuenta que hay que detener la base de datos y TE RECOMENDAMOS que hagas copia de seguridad de los datos).
Una vez que hayas hecho copia de seguridad, te indicamos cómo ampliar el valor del parámetro sga_max_size, para que Oracle use más memoria RAM del equipo:
1. En primer lugar detendremos la base de datos con:
Código:
shutdown immediate;
2. Iniciaremos la base de datos "sin montar", en modo "nomount", con:
Código:
startup nomount;
3. Cambiaremos el valor del parámetro sga_max_size, como ejemplo indicaremos que use 2 GB de RAM, ten cuidado con este parámetro, debes dejar siempre memoria RAM libre suficiente para el sistema operativo. Por ejemplo, si tienes un equipo con 4GB de RAM, deja, cómo mínimo, 1GB para el sistema operativo. Esto dependerá del uso que le des al equipo, si es dedicado para Oracle, no habrá problema en dejar 1GB para el sistema operativo, si lo dedicas también a otras cosas (como terminal server) tendrás que ir comprobando de qué memoria RAM dispones habitualmente. Como ejemplo indicaremos que sga_max_size utilice 2GB:
Código:
alter system set sga_max_size=2G scope=spfile;
4. Pararemos e iniciaremos la base de datos para que se aplique el cambio:
Código:
shutdown immediate;
startup;
Tras este cambio puedes comprobar si Oracle está usando ahora más RAM en el equipo.
Te comentamos también que existen otros dos parámetros: SGA_TARGET, WORKAREA_SIZE_POLICY que también afectan al uso de memoria.
Te explico para qué sirve cada uno:
sga_max_size: establece el tamaño máximo que puede alojar la SGA cuando se inicia la instancia de base de datos. Este parámetro permitirá aumentar el tamaño de la SGA sin necesidad de iniciar la instancia, teniendo en cuenta que el total de la SGA no exceda este parámetro.
sga_target: especifica el tamaño total para todos los componentes de la SGA. De esta forma las distintas áreas de memoria que componen la SGA son configuradas y dimensionadas automáticamente por Oracle (es parámetro está disponible a partir de la versión 10). Las distintas áreas que se configurarán automáticamente:
* Buffer cache: DB_CACHE_SIZE.
* Shared pool: SHARED_POOL_SIZE.
* Large pool: LARGE_POOL_SIZE.
* Java pool: JAVA_POOL_SIZE.
Por ejemplo, si asignamos 2GB a "sga_target" y el parámetro "workarea_size_policy" está a "AUTO", Oracle asignará automáticamente esas 2GB a las distintas áreas DB_CACHE_SIZE, SHARED_POOL_SIZE, LARGE_POOL_SIZE y JAVA_POOL_SIZE.
Con lo cual, SGA_TARGET nunca podrá ser superior al SGA_MAX_SIZE.
Para ver el valor actual de cada parámetro:
Código:
show parameter WORKAREA_SIZE_POLICY
Devolverá algo así:
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
workarea_size_policy string AUTO
Normalmente y en resumen, SGA_MAX_SIZE y SGA_TARGET suelen tener el mismo valor y WORKAREA_SIZE_POLICY estar a "AUTO".
Para cambiar el valor de los parámetros (como te hemos explicado en el post anterior):
Código:
shutdown immediate;
startup nomount;
alter system set SGA_MAX_SIZE=2GB scope=SPFILE;
alter system set SGA_TARGET=2GB scope=SPFILE;
alter system set WORKAREA_SIZE_POLICY=AUTO scope=SPFILE;
shutdown immediate;
startup;
Vaciar SGA
Vaciar el Shared Pool
SQL>alter system flush shared_pool;
Vaciar el Buffer Cache
SQL>alter system flush buffer_cache;
Para vaciar cada session:
SQL>alter session set events = 'immediate trace name flush_cache';