synch/mutex/innodb/trx_sys_mutex
El evento synch/mutex/innodb/trx_sys_mutex
se produce cuando hay una elevada actividad de la base de datos con un gran número de transacciones.
Versiones del motor relevantes
Esta información de evento de espera es compatible con las siguientes versiones del motor:
-
Aurora MySQL, versiones 2 y 3
Contexto
Internamente, el motor de base de datos InnoDB utiliza el nivel de aislamiento de lectura repetible con instantáneas para proporcionar coherencia de lectura. Esto proporciona una vista puntual de la base de datos en el momento en que se creó la instantánea.
En InnoDB, todos los cambios se aplican a la base de datos tan pronto como llegan, independientemente de si están confirmados. Este enfoque significa que sin el control de simultaneidad multiversión (MVCC), todos los usuarios conectados a la base de datos ven todos los cambios y las filas más recientes. Por lo tanto, InnoDB requiere una forma de realizar un seguimiento de los cambios para comprender qué se debe revertir cuando sea necesario.
Para ello, InnoDB utiliza un sistema de transacciones (trx_sys
) para realizar un seguimiento de las instantáneas. El sistema de transacciones realiza lo siguiente:
-
Realiza un seguimiento del ID de transacción de cada fila en los registros de deshacer.
-
Utiliza una estructura interna de InnoDB denominada
ReadView
que ayuda a identificar qué ID de transacción están visibles para una instantánea.
Causas probables del aumento de las esperas
Cualquier operación de base de datos que requiera un manejo coherente y controlado (creación, lectura, actualización y eliminación) de los ID de transacciones genera una llamada desde trx_sys
al mutex.
Estas llamadas se realizan en tres funciones:
-
trx_sys_mutex_enter
: crea el mutex. -
trx_sys_mutex_exit
: libera el mutex. -
trx_sys_mutex_own
: comprueba si el mutex tiene propietario.
La instrumentación de InnoDB Performance Schema realiza un seguimiento de todas las llamadas de mutex trx_sys
. El seguimiento incluye, entre otras acciones, la administración de trx_sys
en el inicio o cierre de la base de datos, las operaciones de reversión, las limpiezas de deshacer, el acceso de lectura a filas y las cargas de grupos de búferes. La elevada actividad de la base de datos con un gran número de transacciones da como resultado la aparición frecuente de synch/mutex/innodb/trx_sys_mutex
entre los eventos de espera principales.
Para obtener más información, consulte Monitoring InnoDB Mutex Waits Using Performance Schema
Acciones
Recomendamos diferentes acciones en función de las causas del evento de espera.
Identificar las sesiones y consultas que provocan los eventos
Normalmente, las bases de datos con una carga de moderada a significativa tienen eventos de espera. Los eventos de espera pueden ser aceptables si el rendimiento es óptimo. Si el rendimiento no es óptimo, examine dónde pasa más tiempo la base de datos. Observe los eventos de espera que contribuyen a la carga más alta. Descubra si puede optimizar la base de datos y la aplicación para reducir esos eventos.
Para ver el gráfico SQL principal en la AWS Management Console
Abra la consola de Amazon RDS en https://console.aws.amazon.com/rds/
. -
En el panel de navegación, seleccione Performance Insights.
-
Elija una instancia de base de datos. Se muestra el panel de Información sobre rendimiento para esa instancia de base de datos.
-
En el cuadro Database load (Carga de base de datos), elija Slice by wait (Corte por espera).
-
Bajo el cuadro Database load (Carga de base de datos), elija Top SQL (SQL principal).
El gráfico enumera las consultas SQL responsables de la carga. Las que están en la parte superior de la lista son las más importantes. Para resolver un cuello de botella, céntrese en estas instrucciones.
Para obtener información general útil sobre la solución de problemas mediante Información sobre rendimiento, consulte la entrada de blog Analyze Amazon Aurora MySQL Workloads with Performance Insights
Examinar otros eventos de espera
Examine los demás eventos de espera asociados con el evento de espera synch/mutex/innodb/trx_sys_mutex
. De este modo, podrá proporcionar más información acerca de la naturaleza de la carga de trabajo. Un gran número de transacciones podría reducir el rendimiento, pero la carga de trabajo también puede hacer que esto sea necesario.
Para obtener más información sobre cómo optimizar las transacciones, consulte Optimizing InnoDB Transaction Management