O tamanho da lista de histórico do InnoDB aumentou significativamente
A lista de histórico de alterações de linha aumentou significativamente desde data
até tamanho
em db-instance
. Esse aumento afeta a performance de consulta e do desligamento do banco de dados.
Tópicos
Versões compatíveis do mecanismo
Essas informações de insights são compatíveis com todas as versões do Aurora MySQL.
Contexto
O sistema de transações do InnoDB mantém o controle de simultaneidade de várias versões (MVCC). Quando uma linha é modificada, a versão pré-modificação dos dados que estão sendo modificados é armazenada como um registro de anulação em um log de anulação. Cada registro de anulação tem uma referência ao seu registro de redefinição anterior, formando uma lista vinculada.
A lista de histórico do InnoDB é uma lista global dos registros de anulação de transações confirmadas. O MySQL usa a lista de histórico para remover os registros e as páginas de log quando as transações não precisarem mais do histórico. O tamanho da lista de histórico é o número total de registros de anulação que contêm modificações na lista do histórico. Cada log contém uma ou mais modificações. Se a lista de histórico do InnoDB ficar muito grande, indicando um grande número de versões de linhas antigas, as consultas e os desligamentos de bancos de dados ficarão mais lentos.
Causas prováveis desse problema
As causas comuns para uma longa lista de histórico incluem o seguinte:
-
Transações de longa duração, seja de leitura ou gravação
-
Uma carga de gravação pesada
Ações
Recomendamos ações distintas dependendo dos motivos do insight.
Tópicos
Não inicie nenhuma operação que envolve um desligamento de banco de dados até que a lista de histórico do InnoDB diminua
Como uma lista de histórico do InnoDB longa retarda desligamentos de banco de dados, reduza o tamanho da lista antes de iniciar operações que envolvam o desligamento de um banco de dados. Essas operações incluem upgrades da versão primária de bancos de dados.
Identificar e encerrar transações de longa duração
Você pode encontrar transações de longa duração consultando information_schema.innodb_trx
.
nota
Certifique-se também de procurar transações de longa duração em réplicas de leitura.
Como identificar e encerrar transações de longa duração
-
No cliente SQL, execute a seguinte 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
-
Encerre cada transação de longa duração com um comando
COMMIT
ouROLLBACK
.
Identificar os principais hosts e usuários usando o recurso Insights de Performance
Otimize as transações para que grandes quantidades de linhas modificadas sejam imediatamente confirmadas.
Métricas relevantes
As métricas a seguir estão relacionadas a esse insight:
-
trx_rseg_history_len
Para obter mais informações, consulte a Tabela de métricas INFORMATION_SCHEMA do InnoDB
no Manual de referência do MySQL 5.7.