¿Por qué mi instancia de base de datos de Amazon RDS utiliza memoria de intercambio cuando tengo memoria suficiente?

7 minutos de lectura
0

Estoy ejecutando una instancia de base de datos de Amazon Relational Database Service (Amazon RDS). La instancia usa grandes cantidades de memoria de intercambio a pesar de que tengo suficiente memoria libre asignada. ¿Por qué se utiliza memoria de intercambio cuando tengo memoria suficiente?

Descripción corta

Las instancias de Amazon Elastic Compute Cloud (Amazon EC2) que ejecutan Linux utilizan memoria de intercambio cuando un sistema requiere más memoria de la asignada. Para obtener más información, consulte Volúmenes de intercambio de almacén de instancias. Como la mayoría de las instancias de base de datos de RDS usan Linux (excepto SQL Server), la base de datos a veces puede utilizar memoria de intercambio.

Las instancias de base de datos de RDS requieren páginas en la RAM solo en el momento en el que se está accediendo a ellas, por ejemplo, cuando se ejecutan consultas. Otras páginas que se introducen en la RAM mediante consultas ejecutadas anteriormente se vacían para intercambiar espacio si no se han usado recientemente. Se recomienda dejar que el sistema operativo (SO) intercambie las páginas antiguas en lugar de obligar al SO a conservar las páginas en la memoria. Esto asegura que haya suficiente RAM libre disponible para las próximas consultas.

El uso de intercambio en Linux no se elimina con frecuencia, ya que hacerlo requiere una sobrecarga adicional para reasignar el intercambio cuando es necesario y al volver a cargar las páginas. Como resultado, si se utiliza espacio de intercambio en la instancia de base de datos de RDS, aunque sea una sola vez, las métricas SwapUsage no vuelven a cero. La memoria de intercambio también se puede usar con HugePages compatibles con Amazon RDS para Oracle y HugePages en Amazon RDS para PostgreSQL. Las HugePages tienen un tamaño superior al predeterminado de Linux, que es de 2 MB.

Resolución

Para entender el comportamiento de uso del intercambio en la instancia de base de datos de RDS, compruebe primero las métricas de rendimiento de la base de datos en función de la carga de trabajo de la aplicación. Consulte las métricas FreeableMemory y SwapUsage de Amazon CloudWatch para comprender el patrón general de uso de memoria en la instancia de base de datos de RDS. Consulte estas métricas para ver si hay una disminución en la métrica FreeableMemory que se produce al mismo tiempo que un aumento en la métrica SwapUsage. Esto puede indicar que hay presión sobre la memoria de la instancia de base de datos de RDS. Para obtener más información, consulte ¿Cómo puedo solucionar problemas de poca memoria libre en una base de datos de Amazon RDS para MySQL? Si hay suficiente memoria liberable disponible, el uso del intercambio no debería afectar al rendimiento de la instancia de base de datos de RDS. Si la memoria liberable se mantiene a un nivel bajo de manera constante, puede cambiar el tamaño de la instancia de base de datos de RDS a un tamaño de instancia mayor que tenga más memoria.

Para supervisar la memoria de intercambio, active la monitorización mejorada para revisar las métricas en intervalos con una definición de tan solo un segundo. La supervisión mejorada recopila estadísticas a nivel de host y CloudWatch recopila datos a nivel de hipervisor cada 60 segundos. Use la supervisión mejorada para identificar los aumentos o disminuciones que se producen durante solo un segundo y para ver la CPU y la memoria que utilizan los procesos individuales. Para obtener más información, consulte Visualización de métricas del sistema operativo mediante CloudWatch Logs.

También puede activar la información de rendimiento para identificar eventos de SQL y espera que consuman un exceso memoria de intercambio en la instancia de base de datos de RDS. Información de rendimiento recopila los datos a nivel de base de datos y los muestra en el panel de Información de rendimiento. La información de rendimiento puede ayudar a solucionar problemas relacionados con el rendimiento de las bases de datos. Para obtener más información, consulte Monitoreo de la carga de base de datos con Performance Insights en Amazon RDS.

Amazon RDS para MySQL

Si tiene poca memoria liberable, ejecute SHOW FULL PROCESSLIST para revisar todos los subprocesos que se están ejecutando en la base de datos. El ID del proceso del resultado de SHOW FULL PROCESSLIST no coincidirá con el ID del proceso que muestra la información de rendimiento. Para ver el ID del proceso correcto, modifique el grupo de parámetros de la base de datos asociado a la base de datos por el parámetro Performance_Schema. Se trata de un parámetro estático, por lo que debe reiniciar la instancia de base de datos de RDS. Para evitar el tiempo de inactividad, modifique el parámetro y reinicie la base de datos fuera de las horas de mayor tráfico. Cuando la memoria haya alcanzado el uso deseado, siga estos pasos:

1.    Ordene los ID de los procesos en la página de Supervisión mejorada para poder ver el ID de los procesos que consumen la máxima cantidad de CPU.

2.    Ejecute la siguiente consulta como usuario maestro:

select * from performance_schema.threads where THREAD_OS_ID in (ID shown in the Enhanced Monitoring window)\G

Por ejemplo, si Thread_OS_Id 10374 y 1432 consumen la máxima cantidad de memoria, ejecute la siguiente consulta:

select * from performance_schema.threads where THREAD_OS_ID in (10374, 1432)\G

Para obtener más información, consulte la Tabla de hilos en el sitio web de MySQL.

3.    Como resultado de esta consulta, obtendrá la columna PROCESSLIST_ID, con el ID del proceso que coincide con el valor del ID de proceso de SHOW FULL PROCESSLIST.

Una vez que tenga el ID del proceso correcto, puede asignar el ID del proceso a la consulta. Puede utilizar el ID para identificar la causa principal del elevado uso de la memoria y la CPU. Puede ver el proceso del SO mediante Supervisión mejorada. Para obtener más información, consulte Visualización de métricas OS en la consola de RDS.

Amazon RDS para PostgreSQL

Para identificar el proceso que consume una gran cantidad de memoria, asigne el ID del proceso de la lista de procesos de Supervisión mejorada a la consulta exacta. Para identificar el proceso, ejecute la siguiente vista pg_stat_activity:

select * from pg_stat_activity where pid=(the PID of your process);

A continuación, ajuste las consultas para consumir menos recursos de computación.

Amazon RDS para SQL Server

Supervisión mejorada puede identificar un ID de subproceso específico que consume una gran cantidad de memoria. El ID de subproceso es lo que SQL Server denomina ID del proceso del kernel (KPID).

Desde Amazon RDS para SQL Server, ejecute la siguiente consulta para obtener el ID del proceso del servidor (SPID) que corresponde al KPID:

select * from sys.sysprocesses where kpid = '<Value of Thread ID from Enhanced Monitoring>' ;

Una vez que tenga el ID del proceso del servidor, por ejemplo 69, ejecute el siguiente comando para revisar lo que está haciendo el SPID 69:

dbcc inputbuffer(69)

Amazon RDS para Oracle

El ID del proceso del SO obtenido de Supervisión mejorada permite ver qué proceso consume más memoria. A continuación, ejecute la siguiente consulta para obtener la dirección del proceso de la sesión:

select ADDR from v$process where SPID=OS_PID;

Puede utilizar la dirección del proceso para identificar la sesión dentro de la base de datos mediante la ejecución de la siguiente consulta:

select sid,serial#,username, status from v$session where PADDR='<ADDR from above query>';

Información relacionada

Información general de la supervisión de métricas en Amazon RDS