¿Por qué se ejecuta lentamente mi consulta en Amazon RDS for MySQL?

Última actualización: 27/10/2021

Estoy intentando solucionar el problema de ejecución lenta de las consultas en Amazon Relational Database Service (Amazon RDS) for MySQL. ¿Por qué ocurre esto y cómo puedo mejorar el rendimiento de la consulta?

Descripción corta

Tenga en cuenta los siguientes factores para mejorar el rendimiento de las consultas:

  • Utilización de recursos (tales como CPU, memoria y almacenamiento)
  • Análisis de cargas de trabajo
  • Ajuste y monitoreo de consultas

Resolución

Utilización de recursos (tales como CPU, memoria y almacenamiento)

Para entender la causa de cualquier problema de rendimiento de la base de datos, verifique todos los recursos del servidor que su instancia está utilizando. Puede monitorear su carga de trabajo y examinar cuándo era normal el rendimiento de la consulta en comparación con el momento en que la consulta comenzó a tardar demasiado en ejecutarse.

Utilice las métricas de Amazon CloudWatch para monitorear estos recursos durante un período de tiempo que incluya los días en que el rendimiento se consideraba normal. También puede ver las métricas de rendimiento en la consola de Amazon RDS para monitorear el rendimiento de la base de datos.

También puede verificar el estado de su instancia para identificar cualquier otro proceso activo o programado que pueda estar afectando al rendimiento de la base de datos. Verifique los eventos que se produjeron mientras su base de datos funcionaba mal en la consola de Amazon RDS.

Análisis de cargas de trabajo

Para analizar la carga de trabajo que contribuye al consumo de recursos, utilice la función Información sobre rendimiento. La función Información sobre rendimiento le proporcionará un análisis gráfico de todas sus consultas y de las esperas que están contribuyendo a aumentar el consumo de recursos.

La función Información sobre rendimiento utiliza la carga de trabajo como métrica principal en lugar de utilizar el número de vCPU de una instancia. Si su carga de trabajo actual excede el límite de vCPU, entonces su servidor está sobrecargado. Si su servidor está sobrecargado, verifique las consultas que contribuyen a su carga de trabajo e identifique formas de optimizar sus consultas. En ese caso, considere la posibilidad de modificar su clase de instancia.

La función Información sobre rendimiento de su carga de trabajo de también se puede dividir en eventos de espera. Investigue las esperas que más recursos consumen al segmentando la carga de la base de datos en función del número de eventos de espera. Las franjas de color más gruesas en el gráfico de carga indican los tipos de espera que más contribuyen a la carga de trabajo. Para obtener más información, consulte Monitoreo de la carga de la base de datos con la función Información sobre rendimiento en Amazon RDS.

También puede utilizar el registro de consultas lentas (habilitado en el grupo de parámetros personalizados) para identificar consultas de ejecución lenta.

A continuación, puede utilizar las métricas de Amazon CloudWatch para verificar si la cantidad de trabajo realizado en su instancia ha aumentado. Por ejemplo:

  • Conexiones de base de datos: número de sesiones de cliente que están conectadas a la instancia de base de datos.
  • Rendimiento de recepción de red (MB/segundo): tasa de tráfico de red hacia y desde la instancia de base de datos.
  • Rendimiento de escritura y lectura: el número medio de megabytes leídos o escritos en el disco por segundo.
  • Latencia de escritura y lectura: tiempo medio de una operación de lectura o escritura en milisegundos.
  • IOPS (lectura y escritura): número medio de operaciones de lectura o escritura de disco por segundo.
  • Espacio de almacenamiento libre (MB): cantidad de espacio en disco no utilizado actualmente por la instancia de base de datos.

Las métricas de latencia indican el tiempo que se tarda en completar una operación de E/S de disco de lectura o escritura. La correlación de las métricas de latencia con el aumento de las conexiones a la base de datos o las métricas de rendimiento podría indicar que la carga de trabajo es la razón de la lentitud en la ejecución de las consultas. Para obtener más información sobre la identificación de factores de uso, consulte ¿Cómo puedo ver que elementos utilizan el almacenamiento en una instancia de base de datos de Amazon RDS que ejecuta MySQL?

También puede utilizar el monitoreo mejorado para recuperar la lista de sistemas operativos implicados en su carga de trabajo y las métricas del sistema subyacentes. De forma predeterminada, el intervalo de monitoreo para el monitoreo mejorado es de 60 segundos. Es una práctica recomendada configurarlo a intervalos de 1 a 5 segundos para obtener puntos de datos más pormenorizados.

Optimización de consultas

Una vez identificada la consulta de larga duración a partir de un registro de consultas lentas o de la función Información sobre rendimiento, considere formas de mejorar el rendimiento de las consultas. Tenga en cuenta los siguientes enfoques a la hora de ajustar una consulta:

  • Para localizar los estados en los que se invierte más tiempo, haga un perfil de las consultas más lentas. Para obtener más información, consulte la opción SHOW PROFILE en el sitio web de MySQL.
  • Ejecute el comando SHOW FULL PROCESSLIST junto con el monitoreo mejorado. Al utilizarse conjuntamente, es posible revisar la lista de operaciones que se están realizando actualmente en el servidor de la base de datos.
  • Utilice el comando SHOW ENGINE INNODB STATUS para obtener Información sobre el procesamiento de transacciones, esperas y bloqueos.
  • Encuentre las consultas bloqueadas y resuelva el bloqueo. Para obtener más información, consulte ¿Por qué se ha bloqueado una consulta a la instancia de base de datos de Amazon RDS for MySQL cuando no hay ninguna otra sesión activa?
  • Publicación de los registros de MySQL en Amazon CloudWatch. Los registros rotan cada hora para mantener el umbral del 2 % del espacio de almacenamiento asignado. A continuación, se eliminan si tienen más de dos semanas de antigüedad o si su tamaño combinado supera el umbral del 2 %.
  • Configure una alarma de Amazon CloudWatch para monitorear el uso de los recursos y recibir una alerta cada vez que se superen los umbrales.
  • Busque el plan de ejecución de la consulta y verifique si la consulta utiliza los índices adecuados. Puede optimizar su consulta utilizando el plan EXPLAIN y revisar los detalles sobre cómo MySQL ejecuta la consulta.
  • Mantenga las estadísticas de sus consultas actualizadas con la opción ANALYZE table. En ocasiones, los optimizadores de consultas pueden elegir planes de ejecución deficientes debido a estadísticas obsoletas. Esto puede dar lugar al rendimiento deficiente de una consulta debido a la estimación inexacta de la cardinalidad tanto de la tabla como de los índices.
  • MySQL 8.0 utiliza ahora una opción EXPLAIN ANALYZE. La opción EXPLAIN ANALYZE es una herramienta de creación de perfiles para sus consultas que le muestra dónde MySQL dedica tiempo a su consulta y por qué. Con EXPLAIN ANALYZE, MySQL planifica, instrumenta y ejecuta la consulta mientras cuenta las filas y mide el tiempo empleado en varios puntos del plan de ejecución. Cuando finalice la consulta, EXPLAIN ANALYZE imprimirá el plan y sus medidas en lugar del resultado de la consulta.
  • En la versión 8 de MySQL, tenga en cuenta que las esperas de bloqueo se enumeran en el esquema de rendimiento de la tabla data_lock_waits. Por ejemplo:
SELECT
  r.trx_id waiting_trx_id,
  r.trx_mysql_thread_id waiting_thread,
  r.trx_query waiting_query,
  b.trx_id blocking_trx_id,
  b.trx_mysql_thread_id blocking_thread,
  b.trx_query blocking_query
FROM       performance_schema.data_lock_waits w
INNER JOIN information_schema.innodb_trx b
  ON b.trx_id = w.blocking_engine_transaction_id
INNER JOIN information_schema.innodb_trx r
  ON r.trx_id = w.requesting_engine_transaction_id;

Para obtener más información, consulte Utilización de la información de transacciones y bloqueo de InnoDB en el sitio web de MySQL.