Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ Relational Database Service/ Melhores práticas/ RDS for MySQL/ Manipulação de transações longas do RDS for MySQL
Atualizado em 2024-09-24 GMT+08:00

Manipulação de transações longas do RDS for MySQL

Impactos potenciais de transações longas

  1. 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.
  2. Transações longas podem ocupar uma grande quantidade de memória.
  3. 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.
    1. Faça logon no console de gerenciamento.
    2. Clique em no canto superior esquerdo da página e escolha Databases > Relational Database Service.
    3. Na página Instances, localize a instância de BD de destino e clique em View Metric na coluna Operation.
    4. 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

  1. 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;

  2. 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

  1. Visualize os alarmes configurados.
    1. Faça logon no console de gerenciamento.
    2. Clique em no canto superior esquerdo da página e escolha Management & Governance > Cloud Eye.
    3. Escolha Alarm Management > Alarm Rules.
      Figura 1 Exibir regras de alarme
  2. Configure alarmes de transações longas.
    1. Clique em no canto superior esquerdo da página e escolha Databases > Relational Database Service.
    2. Na página Instances, localize a instância de BD de destino e clique em View Metric na coluna Operation.
    3. Exiba a métrica Long Transaction.
      Figura 2 Visualizar métricas
    4. Clique em + no canto superior direito da métrica Long Transaction.
      Figura 3 Transação longa
    5. 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.