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.

Contexto

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.

Identificación y facilitación de 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 el procedimiento mysql.rds_kill almacenado.

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: esta métrica del contador se puede consultar en la información de rendimiento, así como en la tabla INFORMATION_SCHEMA.INNODB_METRICS. Para obtener más información, consulte la tabla de métricas de InnoDB en la documentación de MySQL.

  • RollbackSegmentHistoryListLength: esta métrica de Amazon CloudWatch mide los registros undo que registran transacciones confirmadas con registros marcados para su eliminación. Estos registros están programados para ser procesados por la operación de depuración de InnoDB. La métrica trx_rseg_history_len tiene el mismo valor que RollbackSegmentHistoryListLength.

  • PurgeBoundary: el número de transacción hasta el que se permite la depuración de InnoDB. Si esta métrica de CloudWatch no aumenta durante periodos de tiempo prolongados, es una buena indicación de que las transacciones de larga duración bloquean la depuración de InnoDB. Para investigar, compruebe las transacciones activas en el clúster de base de datos de Aurora MySQL. Esta métrica solo está disponible para Aurora MySQL versión 2.11 y posteriores, además de la versión 3.08 y posteriores.

  • PurgeFinishedPoint: el número de transacción hasta el que se realiza la depuración de InnoDB. Esta métrica de CloudWatch puede ser de utilidad para evaluar la rapidez con la que avanza la depuración de InnoDB. Esta métrica solo está disponible para Aurora MySQL versión 2.11 y posteriores, además de la versión 3.08 y posteriores.

  • TransactionAgeMaximum: es la antigüedad de la transacción en ejecución más antigua. Esta métrica de CloudWatch está disponible solo para la versión 3.08 y posteriores de Aurora MySQL.

  • TruncateFinishedPoint: el número de transacción hasta el que se realiza la operación de deshacer el truncado. Esta métrica de CloudWatch solo está disponible para Aurora MySQL versión 2.11 y posteriores, además de la versión 3.08 y posteriores.

Para obtener más información sobre las métricas de CloudWatch, consulte Métricas de nivel de instancia para Amazon Aurora.