Alto consumo de SWAP por procesos Oracle en AIX | ExpoDBA

Alto consumo de SWAP por procesos Oracle en AIX

Alto consumo de SWAP por procesos Oracle en AIX

Este problema se presenta en sistemas IBM AIX con bases de datos Oracle versión 9.2 como lentitud en la base de datos que en realidad es lentitud en el Sistema Operativo.

Esta lentitud se debe a que el Sistema Operativo empieza a utilizar memoria SWAP disponible en el equipo asumiendo todo el overhead que eso implica, y haciendo crecer este uso cada vez más, afectando la performance del equipo y hasta haciendolo inaccesible si no se detecta a tiempo.

En la base de datos se puede manifestar el problema como un incremento en los latch contention como "library cache" y "shared pool" latches.

El problema reside en que AIX tiene una configuración por defecto de algunos parametros del kernel que no es compatible con el uso que Oracle le da al Sistema operativo.

En AIX se puede configurar el uso de Memoria virtual indicando cuanto espacio de la memoria física le destina el sistema a paginas de memoria de datos y cuanto a páginas de programas (non-computational y computational pages).

El código ejecutable de Oracle, la SGA y la PGA, son tomados como computational data, por lo tanto ocupan espacio destinado a computational-pages

Los parametros del kernel que parametrizan esta utilización de memoria son:

MINPERM%: Que porcentaje de memoria MÍNIMO debe usar el kernel para las paginas que contengan datos de archivos que estén siendo leídos o escritos (non-computational pages).Por defecto este parametro esta seteado a 20%.

MAXPERM%: Porcentaje de memoria MÁXIMO debe usar el kernel para las paginas que contengan datos de archivos que estén siendo leídos o escritos. (non-computational pages). Por defecto este parametro esta seteado a 80%.
MAXCLIENT%:  Porcentaje de memoria MÁXIMO de páginas de datos que puede tener un cliente sobre el total de páginas del cliente. Por defecto este parametro esta seteado a 80%.

Cuando Oracle solicita al sistema operativo un bloque de disco que necesita, el sistema operativo lo monta en memoria y lo deja residente en el espacio de non-computational pages. De ahi Oracle lo toma y lo almacena en su propio espacio de memoria que es la SGA, (computational pages) pero el Sistema Operativo esto no lo sabe (porque para el SO la SGA es solo una porción de memoria asignada a Oracle y no le importa lo que este haga adentro), por lo que también guarda su propia copia del bloque.

De esta manera tenemos 2 veces la misma página en memoria, una en el espacio computational y otro en el espacio non-computational, duplicando así el espacio en memoria ocupado.

Los parametros minperm, maxperm y maxclient, limitan el uso de las páginas de datos, pero nada dicen de las de trabajo, por lo tanto con la configuración default, siempre se mantendrá un 20% de espacio reservado para datos, y como máximo un 80%, y esta configuración es la que marca el ritmo de la memoria. Por lo tanto cuando la memoria de datos esté al máximo de su capacidad (80%) la memoria de trabajo queda resignada a utilizar solo el 20% de la memoria total, y obligada a utilizar SWAP.

Lo que propone Oracle es restringir la cantidad de memoria que AIX reserva para páginas de datos a 30% (MAXPERM%), así como tambien la cantidad de páginas de datos por cliente a 30% (MAXCLIENT%) porque estas páginas ya las administra oracle, logrando de esta manera mantener como mínimo un 70% de la memoria disponible para computational pages.

MINPERM% = 10-15%

MAXPERM% = 20-30%
MAXCLIENT% <= MAXPERM%

Para las versiones de AIX AIX 5.2 ML04 o superiores y AIX 5.3 ML01 o superiores, aparece un nuevo parametro lru_file_repage.

Este parametro afecta directamente a la utilización de SWAP y cambia completamente el panorama  ya que si es seteado a 0, indica al VMM a solo sacar non-computational pages de la memoria y dejar las computational pages solamente (Dentro de las cuales se encuentran las destinadas a la SGA).

Para estas versiones de AIX la configuración recomendada por AIX para trabajar con Oracle es:

lru_file_repage = 0

lru_poll_interval = 10 (msecs)
    El tiempode pausa entre interrupciones del LRUD
minperm% <= 3
maxperm% = 90
strict_maxperm = 0
    puesto en 0 indica que el limite maxperm no es estricto.
maxclient% = 90
strict_maxclient = 1
    si se setea a 0 proteje computational pages y solo baja a SWAP las de datos. Si se altera debe tenerse mucho cuidado con la utilización de memoria.

page_steal_method = 1

     Utiliza un metodo de selección de páginas con listas separadas para datos y trabajo

Si es posible dentro de las capacidades técnicas del equipo y la versión de Oracle que se ejecuta es 10g o superior, se recomienda que ante esta configuración se setee el parametro de base de datos LOCK_SGA=TRUE para mantener la SGA siempre en memoria.

IMPORTANTE:

 Todas estas configuraciones recomendadas son solo un punto de partida para hacer un tunning más profundo. Si bien es lo recomendado y se ajusta a la mayoría de las implementaciones quizas su entorno requiera algo más específico para completar el tuning, por lo que se recomienda luego de impactar estos cambios hacer un seguimiento continuo y volver a analizar la performance luego de un tiempo.

Nota Metalink: AIX: Database performance gets slower the longer the database is running [ID 316533.1]

Nota IBM: Running Oracle on AIX

Nota IBM: Oracle Architecture and Tuning on AIX (PDF)