Saltar al contenido

¿Cómo puedo gestionar los problemas de poca memoria libre o de uso elevado de intercambios en mi instancia de base de datos de Amazon RDS para Oracle?

8 minutos de lectura
0

Quiero gestionar los problemas de poca memoria libre o de uso elevado de intercambios en mi instancia de Amazon Relational Database Service (Amazon RDS) para Oracle Database (DB).

Descripción corta

En las bases de datos de Oracle, la memoria disponible es utilizada principalmente por el área global del programa (PGA) y el área global del sistema (SGA). Al configurar una instancia de base de datos de Oracle, asegúrate de que la suma de estos dos componentes sea inferior a la memoria física total. Debes ajustar los parámetros de la memoria para evitar un uso elevado de intercambio y grandes cantidades de memoria física. Para obtener más información sobre el uso de intercambio y los límites recomendados, consulta ¿Por qué mi instancia de base de datos de Amazon RDS utiliza memoria de intercambio cuando tengo memoria suficiente?

Si tu instancia de base de datos usa la administración automática de la memoria, la cantidad total de memoria utilizada por las bases de datos de Oracle se administra mediante los parámetros MEMORY_TARGET y MEMORY_MAX_TARGET. El valor establecido en MEMORY_TARGET es igual a la suma de SGA y PGA. La memoria utilizada por SGA viene determinada por los parámetros SGA_MAX_SIZE y SGA_TARGET. La memoria utilizada por PGA se administra mediante los parámetros PGA_AGGREGATE_TARGET y PGA_AGGREGATE_LIMIT. Los valores predeterminados de estos parámetros se establecen en valores altos por motivos de rendimiento. Sin embargo, en ciertos casos de uso, estos valores altos pueden provocar una contención de memoria y un uso elevado del intercambio.

Resolución

Para solucionar este problema, usa uno de los siguientes métodos según el modo de administración de memoria de tu instancia.

  • Si tu instancia de base de datos usa la administración automática de la memoria, reduce el valor de MEMORY_TARGET.
  • Si tu instancia de base de datos usa la administración automática de memoria compartida, reduce los valores de los parámetros PGA y SGA de la instancia.

Nota: Aunque estos parámetros son parámetros dinámicos, debes reiniciar la instancia sin conmutación por error para poder modificar estos parámetros. Para obtener más información, consulta la nota de Activación de HugePages para una instancia de RDS para Oracle.

Sigue estos pasos:

  1. Asegúrate de que la instancia de base de datos utilice la administración automática de la memoria o la administración automática de la memoria compartida. Para comprobar los parámetros SGA, PGA y MEMORY_TARGET, ejecuta el siguiente comando:

    SQL> SHOW PARAMETER SGA;
    SQL> SHOW PARAMETER PGA;
    SQL> SHOW PARAMETER MEMORY_TARGET;

    Si se establece MEMORY_TARGET, la instancia usa la administración automática de la memoria.
    Si MEMORY_TARGET no está configurado, pero sí SGA_TARGET y PGA_AGGREGATE_TARGET, la instancia utiliza la administración automática de memoria compartida.

    Para obtener más información, consulta Enabling automatic memory management (Habilitación de la administración automática de la memoria) en el sitio web de Oracle.

  2. Para ver el uso de memoria de PGA y SGA, ejecuta el siguiente comando:

    SQL> SELECT (value/1024/1024) CURRENT_PGA_ALLOCATED_IN_MB FROM V$PGASTAT WHERE NAME ='total PGA allocated';SQL> SELECT SUM (bytes/1024/1024) CURRENT_SGA_SIZE_IN_MB,con_id FROM V$SGASTAT group by con_id;

    Para ver la memoria máxima asignada para PGA y SGA, después del último reinicio, ejecuta el siguiente comando:

    SQL> SELECT (value/1024/1024) MAX_PGA_ALLOCATED_IN_MB FROM V$PGASTAT WHERE NAME = 'maximum PGA allocated';SQL> SELECT SUM (bytes/1024/1024) MAX_SGA_SIZE_IN_MB FROM V$SGAINFO WHERE NAME='Maximum SGA Size';

    Para ver las vistas consultivas de PGA y SGA, ejecuta el siguiente comando:

    SQL> SELECT PGA_TARGET_FOR_ESTIMATE,PGA_TARGET_FACTOR, ADVICE_STATUS, ESTD_TIME, ESTD_PGA_CACHE_HIT_PERCENTAGE FROMV$PGA_TARGET_ADVICE ORDER BY PGA_TARGET_FACTOR;
    SQL> SELECT SGA_SIZE,SGA_SIZE_FACTOR, ESTD_DB_TIME_FACTOR, ESTD_PHYSICAL_READS FROMV$SGA_TARGET_ADVICE ORDER BY SGA_SIZE ASC;

    Nota: En la configuración de CDB, el comando V$PGASTAT muestra la información específica de PDB que realizas en la consulta.

  3. Para evitar un consumo excesivo de memoria y un uso elevado de intercambio, define la configuración de los parámetros de memoria. Esta configuración te ayuda a ajustar la base de datos para obtener un mejor rendimiento. Puedes cambiar cualquiera de los parámetros de estos ejemplos mediante el grupo de parámetros de instancia.

    Si tu instancia usa la administración automática de memoria, solo se establece el parámetro MEMORY_TARGET. De forma predeterminada, este parámetro se establece en el siguiente valor:

    MEMORY_TARGET = MEMORY_MAX_TARGET = {DBInstanceClassMemory*3/4}

    Si tu instancia usa la administración automática de memoria compartida, los parámetros de PGA_AGGREGATE_TARGET y SGA_TARGET se establecen en los siguientes valores predeterminados:

    PGA_AGGREGATE_TARGET= {DBInstanceClassMemory*1/8}
    SGA_TARGET= SGA_MAX_SIZE = {DBInstanceClassMemory*3/4}

    Si el uso de memoria con esta configuración predeterminada es alto, ajusta la configuración predeterminada para limitar la memoria utilizada por la instancia de Oracle. Utiliza las vistas de asesoramiento de memoria anteriores para ajustar los parámetros de la memoria. Se recomienda ajustar los parámetros de memoria en un entorno de prueba antes de aplicar los cambios a las bases de datos de producción.

    Ejemplo: si tu instancia es de administración automática de memoria, reduce solo los valores MEMORY_TARGET y MEMORY_MAX_TARGET:

    MEMORY_TARGET = MEMORY_MAX_TARGET = {DBInstanceClassMemory*1/2}
    Alternativa:
    MEMORY_TARGET = MEMORY_MAX_TARGET = {DBInstanceClassMemory*3/5}
    Alternativa:
    MEMORY_TARGET = MEMORY_MAX_TARGET = {DBInstanceClassMemory*2/3}

    Ejemplo: si tu instancia usa la administración automática de memoria compartida, reduce solo los parámetros de memoria de SGA o PGA en función de los valores recomendados que se muestran en el paso anterior:

    SGA_TARGET = {DBInstanceClassMemory*1/2}
    Alternativa:
    SGA_TARGET = {DBInstanceClassMemory*2/3}

    Para ajustar el uso de memoria del área de memoria del programa, define el siguiente valor para PGA_AGGREGATE_TARGET:
    PGA_AGGREGATE_TARGET = {DBInstanceClassMemory*1/12}

  4. En ciertos casos de uso, el uso de memoria por parte de la PGA puede superar el valor PGA_AGGREGATE_TARGET y alcanzar el valor establecido en el parámetro PGA_AGGREGATE_LIMIT. El valor predeterminado de PGA_AGGREGATE_LIMIT depende de la configuración de memoria de la instancia de base de datos. Para obtener más información, consulta PGA_AGGREGATE_LIMIT en el sitio web de Oracle.

    Si el valor predeterminado de PGA_AGGREGATE_LIMIT es muy alto, es posible que la instancia de RDS tenga muy poca memoria física o no tenga memoria física para el host subyacente. Esto provoca un uso elevado del intercambio y problemas de contención de memoria.

    Para solucionar estos casos de uso, localiza qué procesos o consultas utilizan una gran cantidad de PGA. Para ver la asignación del área de programa por proceso, ejecuta el siguiente comando:

    SQL> SELECT spid, program, round(pga_max_mem/1024/1024) max_MB, round(pga_alloc_mem/1024/1024)alloc_MB, round(pga_used_mem/1024/1024) used_MB, round(pga_freeable_mem/1024/1024) free_MB,con_id FROM V$PROCESS ORDER BY 4;

    Para ver el uso de memoria de PGA en las sesiones de usuario, excluyendo los procesos en segundo plano, ejecuta el siguiente comando:

    SQL> SELECT sum(p.pga_alloc_mem)/1024/1024 "PGA Allocated MEMORY OF USER SESSION (MB)",p.con_id FROM v$process p, v$session s WHERE P.ADDR = S.paddr and p.background IS NULL group by p.con_id;

    Para ver el uso de memoria de PGA por sesión y las consultas que ejecutas cada sesión, ejecuta el siguiente comando:

    SQL> SELECT s.username, p.pga_alloc_mem/1024/1024 "PGA Allocated MEMORY OF USER SESSION (MB)", q.sql_text,p.con_id FROM v$process p, v$session s, v$SQL q WHERE P.ADDR = S.paddr AND p.background IS NULL AND s.sql_id = q.sql_id ORDER BY 2;

    Nota: En la configuración de CDB, comprueba el uso de los recursos del contenedor mediante la columna con_id. En una configuración que no es CDB, la columna con_id siempre es 0.

    Para reducir el uso elevado de memoria por parte de PGA, utiliza uno o varios de los métodos siguientes:

    Limita el valor de PGA_AGGREGATE_LIMIT. Esto podría impedir que la instancia se quede sin memoria. Sin embargo, puede provocar errores en las conexiones cuando se requiere memoria PGA adicional para un proceso.

    Reducción del valor SGA_TARGET. Esto permite que PGA_AGGREGATE_TARGET aumente hasta el valor de PGA_AGGEGATE_LIMIT sin causar problemas de contención de memoria.
    Aumenta el tamaño de la clase de instancia a un tamaño de instancia mayor con más memoria.

  5. Tras ajustar los parámetros de la memoria como se ha mencionado en los pasos anteriores, supervisa el rendimiento de la base de datos y consulta las opiniones consultivas sobre la base de datos.

    Si los límites de los parámetros de memoria provocan una degradación del rendimiento, intenta aumentar el tamaño de la instancia. Esto permite un mayor uso de memoria para que la instancia de base de datos funcione de manera eficiente.

    Utiliza el panel de Información de rendimiento para analizar la carga de trabajo de la base de datos e identificar las consultas con el mayor uso de memoria. A continuación, ajusta estas consultas con el mayor uso de memoria para usar menos memoria.

Información relacionada

Memory architecture (Arquitectura de memoria) en el sitio web de Oracle.

OFICIAL DE AWSActualizada hace 2 años