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.
 
 - Clique em