Manipulação de transações longas do RDS for MySQL
Impactos potenciais de transações longas
- Transações longas bloqueiam recursos e geralmente aumentam os bloqueios de metadados e de linhas. Como resultado, outras transações não podem acessar esses recursos, reduzindo a simultaneidade do banco de dados.
- Transações longas podem ocupar uma grande quantidade de memória.
- Transações longas podem causar arquivos de log muito grandes e alto uso de armazenamento.
Identificar transações longas
- Conecte-se à sua instância de banco de dados e verifique transações longas e seus IDs de sessão.
Depois de se conectar à instância de BD, execute o seguinte comando para exibir o ID de qualquer transação que tenha sido executada por mais de 3.000s, a instrução SQL executada e o ID de sessão correspondente.
mysql> SELECT trx_id, trx_state, trx_started, trx_mysql_thread_id, trx_query, trx_rows_modified FROM information_schema.innodb_trx WHERE TIME_TO_SEC(timediff(now(),trx_started)) >3000;
Tabela 1 Descrição do parâmetro Parâmetro
Descrição
trx_id
ID da transação.
trx_state
Status da transação, que pode ser RUNNING, LOCK WAIT ou ROLLING BACK.
trx_started
Hora em que a transação foi iniciada.
trx_mysql_thread_id
ID da sessão do MySQL à qual a transação pertence.
trx_query
Instrução SQL executada pela transação.
trx_rows_modified
Número de linhas modificadas pela transação.
- Verifique as métricas de monitoramento para transações longas.
- Faça logon no console de gerenciamento.
- Clique em no canto superior esquerdo da página e escolha Databases > Relational Database Service.
- Na página Instances, localize a instância de BD de destino e clique em View Metric na coluna Operation.
- Verifique a métrica de transação longa rds_long_transaction. Se a métrica aumentar linearmente para um valor grande, haverá transações longas.
Eliminar transações longas
- Obtenha os IDs de thread correspondentes às transações longas.
Execute a instrução SQL em Conexão à sua instância de BD para verificar transações longas e seus IDs de sessão para obter o ID de sessão da transação cujo tempo de execução excede um determinado período (por exemplo, 3.000s).
mysql> SELECT trx_mysql_thread_id FROM information_schema.innodb_trx WHERE TIME_TO_SEC(timediff(now(),trx_started)) >3000;
- Depois de obter o ID da sessão, execute o comando kill para eliminar a transação.
mysql> kill trx_mysql_thread_id
Elimine uma transação longa fará com que a transação seja revertida. Avalie o impacto antes de executar este comando.
Configurar alarmes de transação longa
- Visualize os alarmes configurados.
- Faça logon no console de gerenciamento.
- Clique em no canto superior esquerdo da página e escolha Management & Governance > Cloud Eye.
- Escolha Alarm Management > Alarm Rules.
Figura 1 Exibir regras de alarme
- Configure alarmes de transações longas.
- Clique em no canto superior esquerdo da página e escolha Databases > Relational Database Service.
- Na página Instances, localize a instância de BD de destino e clique em View Metric na coluna Operation.
- Exiba a métrica Long Transaction.
Figura 2 Visualizar métricas
- Clique em + no canto superior direito da métrica Long Transaction.
Figura 3 Transação longa
- Na página exibida, defina os parâmetros conforme necessário. Para obter detalhes sobre os parâmetros, consulte Criação de uma regra de alarme.