La longitud de la lista de historial de InnoDB ha aumentado de forma significativa
A partir de fecha
, la lista de su historial de cambios en las filas aumentó de forma significativa, hasta longitud
en db-instance
. Este aumento afecta al rendimiento de cierre de consultas y bases de datos.
Temas
Versiones del motor admitidas
Esta información es compatible con todas las versiones de Aurora MySQL.
Context
El sistema de transacciones InnoDB mantiene el control de simultaneidad multiversión (MVCC). Cuando se modifica una fila, la versión previa a la modificación de los datos que se están modificando se almacena como registro de deshacer en un registro de deshacer. Cada registro de deshacer tiene una referencia a su registro de rehacer anterior, lo que da lugar a una lista enlazada.
La lista del historial de InnoDB es una lista global de los registros de deshacer de las transacciones confirmadas. MySQL usa la lista del historial para purgar registros y páginas de registro cuando las transacciones ya no necesitan el historial. La longitud de la lista del historial es el número total de registros de deshacer que contienen modificaciones en la lista del historial. Cada registro contiene una o varias modificaciones. Si la longitud de la lista del historial de InnoDB aumenta demasiado, eso indica que hay un gran número de versiones de filas antiguas, y las consultas y los cierres de bases de datos se ralentizan.
Causas probables de este problema
Las causas típicas de que la lista del historial sea larga son, entre otras, las siguientes:
-
Transacciones de larga duración, ya sean de lectura o escritura
-
Una carga de escritura pesada
Acciones
Recomendamos diferentes acciones en función de las causas.
Temas
No inicie ninguna operación que implique el cierre de la base de datos hasta que la lista del historial de InnoDB se reduzca.
Si la lista del historial de InnoDB es muy larga, los cierres de la base de datos se ralentizan, por lo que debe reducir el tamaño de la lista antes de iniciar operaciones que impliquen el cierre de la base de datos. Estas operaciones incluyen las actualizaciones de la versión principal de la base de datos.
Identifique y finalice las transacciones de larga duración
Para encontrar transacciones de larga duración, consulte information_schema.innodb_trx
.
nota
Asegúrese también de buscar transacciones de larga duración en las réplicas de lectura.
Para identificar y finalizar transacciones de larga duración
-
En su cliente SQL, ejecute la siguiente consulta:
SELECT a.trx_id, a.trx_state, a.trx_started, TIMESTAMPDIFF(SECOND,a.trx_started, now()) as "Seconds Transaction Has Been Open", a.trx_rows_modified, b.USER, b.host, b.db, b.command, b.time, b.state FROM information_schema.innodb_trx a, information_schema.processlist b WHERE a.trx_mysql_thread_id=b.id AND TIMESTAMPDIFF(SECOND,a.trx_started, now()) > 10 ORDER BY trx_started
-
Finalice cada transacción de larga duración con un comando
COMMIT
oROLLBACK
.
Utilice Información sobre rendimiento para verificar los principales hosts y usuarios.
Optimice las transacciones para que se confirmen inmediatamente un gran número de filas modificadas.
Métricas relevantes
Las siguientes métricas están relacionadas con esta información:
-
trx_rseg_history_len
Para obtener más información, consulte InnoDB INFORMATION_SCHEMA Metrics Table
(Tabla de métricas INFORMATION_SCHEMA de InnoDB) en MySQL 5.7 Reference Manual (Manual de referencia de MySQL 5.7).