Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
¿Por qué mi instancia de base de datos de Amazon RDS utiliza memoria de intercambio cuando tengo memoria suficiente?
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. Quiero solucionar este problema.
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, consulta Habilitación del volumen de intercambio del almacén de instancias para las instancias M1 y C1 de EC2. Como la mayoría de las instancias de base de datos de RDS usan Linux (excepto SQL Server), es posible que la base de datos utilice memoria de intercambio.
Las instancias de base de datos de RDS solo requieren páginas en la RAM 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 están en uso. 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, comprueba primero las métricas de rendimiento de la base de datos en función de la carga de trabajo de la aplicación. Consulta las métricas FreeableMemory y SwapUsage de Amazon CloudWatch para ver el patrón general de uso de memoria en la instancia de base de datos de RDS. Consúltalas 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 en la memoria de la instancia de base de datos de RDS. Para obtener más información, consulta ¿Cómo puedo solucionar los problemas de poca memoria liberable 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 que se puede liberar es constantemente baja, cambia la clase de instancia de base de datos de RDS por una clase de instancia más grande que tenga más memoria.
Para supervisar la memoria de intercambio, activa Supervisión mejorada para revisar las métricas en intervalos de tan solo un segundo. Supervisión mejorada recopila estadísticas a nivel de host y CloudWatch recopila datos a nivel de hipervisor cada 60 segundos. Supervisión mejorada identifica los aumentos o disminuciones que se producen durante solo un segundo y muestra la CPU y la memoria que utilizan los procesos individuales. Para obtener más información, consulta Visualización de métricas del sistema operativo mediante Registros de CloudWatch.
También puedes activar Información de rendimiento para identificar eventos de SQL y espera que consuman un exceso de 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. Usa Información de rendimiento para solucionar problemas relacionados con el rendimiento de las bases de datos. Para obtener más información, consulta Supervisión de la carga de base de datos con Performance Insights en Amazon RDS.
Amazon RDS para MySQL
Si tienes poca memoria liberable, ejecuta SHOW FULL PROCESSLIST para revisar todos los subprocesos que se ejecutan en la base de datos. Para obtener más información, consulta SHOW PROCESSLIST statement (Instrucción SHOW PROCESSLIST) en el sitio web de MySQL. El ID del proceso del resultado de SHOW FULL PROCESSLIST no coincidirá con el ID del proceso que muestra Supervisión mejorada. Para ver el ID del proceso correcto, modifica 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 debes reiniciar la instancia de base de datos de RDS.
Nota: Para evitar el tiempo de inactividad, modifica el parámetro y reinicia la base de datos fuera de las horas de mayor tráfico.
Cuando la memoria haya alcanzado el uso deseado, sigue estos pasos:
- Ordena los ID de los procesos en la página de Supervisión mejorada para ver los ID de los procesos que consumen la CPU máxima.
- Ejecuta la siguiente consulta como usuario maestro:
Por ejemplo, si Thread_OS_Id 10374 y 1432 consumen la máxima cantidad de memoria, ejecuta la siguiente consulta:select * from performance_schema.threads where THREAD_OS_ID in (ID shown in the Enhanced Monitoring window)\G
Para obtener más información, consulta The threads table (La tabla de subprocesos) en el sitio web de MySQL.select * from performance_schema.threads where THREAD_OS_ID in (10374, 1432)\G
- Como resultado de esta consulta, obtendrás 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 tengas el ID del proceso correcto, asigna el ID del proceso a la consulta. Utiliza el ID de proceso para identificar la causa principal del elevado uso de la memoria y la CPU.
Para ver el proceso del sistema operativo, utiliza Supervisión mejorada. Para obtener más información, consulta 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, asigna el ID del proceso de la lista de procesos de Supervisión mejorada a la consulta exacta. Para identificar el proceso, ejecuta la siguiente vista pg_stat_activity:
select * from pg_stat_activity where pid=(the PID of your process);
A continuación, ajusta 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 RDS para SQL Server denomina ID del proceso del kernel (KPID).
En RDS para SQL Server, ejecuta 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 tengas el ID del proceso del servidor (por ejemplo, 69), ejecuta el siguiente comando para revisar lo que está haciendo el SPID 69:
dbcc inputbuffer(69)
Amazon RDS para Oracle
Para identificar el proceso que consume más memoria, utiliza el ID de proceso del sistema operativo de Supervisión mejorada. A continuación, ejecuta la siguiente consulta para obtener la dirección del proceso de la sesión:
select ADDR from v$process where SPID=OS_PID;
Para identificar la sesión dentro de la base de datos, utiliza la dirección del proceso para ejecutar la siguiente consulta:
select sid,serial#,username, status from v$session where PADDR='<ADDR from above query>';
Cuando hayas activado Supervisión mejorada, compara las métricas FreeMemory y FreeableMemory. Si las métricas son diferentes, esto puede mostrar que se utiliza una gran cantidad de memoria en la memoria caché o inactiva. Este uso de memoria puede provocar un uso elevado del intercambio. Es posible que tengas que borrar la memoria caché. Para obtener más información sobre cómo borrar la memoria caché, consulta Vaciado de la caché de búfer.
Nota: Borrar la memoria caché del búfer puede afectar negativamente al rendimiento de la base de datos.
Información relacionada
Vídeos relacionados


Contenido relevante
- preguntada hace 2 meseslg...
- Respuesta aceptadapreguntada hace 3 meseslg...
- preguntada hace un meslg...
- preguntada hace 4 meseslg...
- preguntada hace 2 meseslg...