Skip to main content

Command Palette

Search for a command to run...

Buenas prácticas de memoria

Updated
4 min readView as Markdown
J
Un apasionado de la base de datos y la educación. Crecemos en comunidad y la educación transforma vidas.

Level 200

Introducción:

Cuando creamos nuestra base de datos Oracle una de las primeras consideraciones a tener es como vamos a distribuir y asignar la memoria del servidor de base de datos.

Configuración Inicial:

La memoria debe afinarse según la carga de la base de dato y la naturaleza de la misma; sin embargo hay configuraciones iniciales que Oracle nos recomienda como buenas prácticas.

Buena práctica: Como referencia podriamos asignar hasta un 80% de la memoria para Oracle (SGA + PGA) y dejar un 20% para el sistema operativo; sin embargo esto va a depender mucho de lo que tenga instalado el servidor y las necesidades de memoria del sistema operativo.

Procedimiento:

Entonces lo primero que debemos hacer es determinar la memoria total del servidor.

free -h

Memoria total 6.9G, 80%=5.52GB

Según lo obtenido tenemos 5.52GB para asignar a Oracle, es decir la SGA + PGA no debería pasar ese valor.

Y como configuro esos valores?

Esos valores se configura en los parámetros de base de datos, los cuales son los siguientes:

sga_target=5GB

pga_agregate_target= 0.5GB

***Estos valores asignados pueden y van a varíar según la necesidad de la base de datos, para efectos de este ejemplo usaremos esos valores.

Estos valores se configuran en el parameter file o el spfile, tener en cuenta que si ambos existen tiene precedencia el spfile.

La ruta donde se encuentra ese archivo por defecto es el:

$ORACLE_HOME/dbs

En la imagen vemos el archivo spfileDBACEJS.ora. Si quisiéramos generar un parameter file desde el spfile ejecutamos el siguiente comando:

create pfile from spfile;

Vemos que ya se genero el parameter file: init

También podemos cambiar esos parametros con comandos:

alter system

Nos dice que no podemos cambiar el parámetro porque el parámetro sga_max_size es menor, por tanto primero cambiaremos ese parámetro.

Obtenemos error porque ese parámetro no es dinámico, un parámetro es dinámico cuando se puede cambiar sin reiniciar la base de datos, entonces para poder cambiar agregamos la cláusula scope=spfile.

alter system set sga_max_size=5G scope=spfile;

Y para que el parámetro se aplique necesitamos reiniciar la base de datos.

shutdown immediate

startup

***Problemas!!!, a veces podemos obtener errores y esto pueden no tener tanto detalle como para resolverlos, en ese escenario tenemos que revisar el alert.log, el cual es el archivo que registra los eventos de interés que ocurren en la base de datos.

Ahora que tenemos el detalle del error vemos que se origina por el large_pages, para efectos prácticos y poder mostrar la configuración de memoria configuraremos:

large_pages=auto;

Y ahora si levanta la base de datos:

y validamos que el parámetro se haya modificado:

show parameter sga_max

y ahora procedemos a cambiar la sga

Y ahora cambiamos el pga, dado que es un parámetro dinámico nos permite hacerlo sin reiniciar la base de datos.

alter system set pga_aggregate_target=512M;

Ya con eso tenemos configurado la memoria de la base de datos según la referencia del 80% del total de la memoria; sin embargo los valores de sga y pga se deberán ir ajustando según la característica de carga de la base de datos.

Y que pasa si intento agregar memoria que no tengo?

alter system set pga_aggregate_target=10G;

Oracle nos arroja un error dado que detecta que no existe memoria física suficiente para la asignación.

Conclusión:

La asignación de memoria es una de las actividades criticas a realizar al implementar una base de datos y esta muy relacionada con la configuración del sistema operativo , memoria física disponible y la característica de carga de la base de datos, es una actividad que se ejecuta inclusive después de la implementación como parte del afinamiento de la base de datos.

4 views