martes, 26 de febrero de 2008

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
Oracle SGA Componentes ~ 50\% del total
Sistema operativo + Otros componentes ~15\% del total
Memoria de usuario ~ 35\% del total

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
Database Buffer Cache ~80\% de la SGA
Shared Pool Area ~12\% de la SGA
Fixed Size ~1\% de la SGA
Redo Log Buffer ~0.1\% de la SGA

La distribución puede venir bien para comenzar a establecer un sistema, aunque posteriormente podrán variar (y habrá que realizar tuning de ellos ) cuando se conozca o varíen el tipo de acceso a la base de datos, los patrones de acceso, usuarios concurrentes en el sistema etc.
Para entender mejor estas tablas proponemos el siguiente ejemplo:
Tengo un sistema configurado con 2 GB de memoria y con una estimación de 100 sesiones concurrentes. La aplicación requiere responder en pocos segundos. Es una base de datos que tiene muchas transacciones.

Componentes del sistema Memoria asignada (en Mb)
SGA para ORACLE ~1024
Sistema operativo + Otros componentes ~306
Memoria de usuario ~694

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)
Database Buffer Cache ~800
Shared Pool Area ~128 - 188
Fixed Size + Misc ~ 8
Redo Log Buffer ~ 1 (promedio 512K)