La longitud de la lista de historial de InnoDB ha aumentado de forma significativa - Amazon Aurora

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.

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.

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
  1. 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
  2. Finalice cada transacción de larga duración con un comando COMMIT o ROLLBACK.

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).