

# La longitud de la lista de historial de InnoDB ha aumentado de forma significativa
<a name="proactive-insights.history-list"></a>

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.

**Topics**
+ [Versiones del motor admitidas](#proactive-insights.history-list.context.supported)
+ [Contexto](#proactive-insights.history-list.context)
+ [Causas probables de este problema](#proactive-insights.history-list.causes)
+ [Acciones](#proactive-insights.history-list.actions)
+ [Métricas relevantes](#proactive-insights.history-list.metrics)

## Versiones del motor admitidas
<a name="proactive-insights.history-list.context.supported"></a>

Esta información es compatible con todas las versiones de Aurora MySQL.

## Contexto
<a name="proactive-insights.history-list.context"></a>

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
<a name="proactive-insights.history-list.causes"></a>

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
<a name="proactive-insights.history-list.actions"></a>

Recomendamos diferentes acciones en función de las causas.

**Topics**
+ [No inicie ninguna operación que implique el cierre de la base de datos hasta que la lista del historial de InnoDB se reduzca.](#proactive-insights.history-list.actions.no-shutdown)
+ [Identifique y finalice las transacciones de larga duración](#proactive-insights.history-list.actions.long-txn)
+ [Utilice Información sobre rendimiento para verificar los principales hosts y usuarios.](#proactive-insights.history-list.actions.top-PI)

### No inicie ninguna operación que implique el cierre de la base de datos hasta que la lista del historial de InnoDB se reduzca.
<a name="proactive-insights.history-list.actions.no-shutdown"></a>

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
<a name="proactive-insights.history-list.actions.long-txn"></a>

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
   ```

1. Finalice cada transacción de larga duración con el procedimiento [mysql.rds\$1kill](mysql-stored-proc-ending.md#mysql_rds_kill) almacenado.

### Utilice Información sobre rendimiento para verificar los principales hosts y usuarios.
<a name="proactive-insights.history-list.actions.top-PI"></a>

Optimice las transacciones para que se confirmen inmediatamente un gran número de filas modificadas.

## Métricas relevantes
<a name="proactive-insights.history-list.metrics"></a>

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](https://dev.mysql.com/doc/refman/8.0/en/innodb-information-schema-metrics-table.html) 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](Aurora.AuroraMonitoring.Metrics.md#Aurora.AuroraMySQL.Monitoring.Metrics.instances).