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/ GaussDB(for MySQL)/ Perguntas frequentes/ Desempenho do banco de dados/ O que devo fazer se os bloqueios em transações longas bloquearem a execução de transações subsequentes?
Atualizado em 2024-09-29 GMT+08:00

O que devo fazer se os bloqueios em transações longas bloquearem a execução de transações subsequentes?

Cenário

Foi relatado o código de erro 1205:

"MySQL error code MY-001205 (ER_LOCK_WAIT_TIMEOUT): Lock wait timeout exceeded; try restarting transaction"

Possíveis causas

  1. Verifique o valor da métrica de monitoramento Row Lock Time. Neste exemplo, o valor dessa métrica era alto, portanto sabemos que havia conflitos de bloqueio no sistema.

    Para obter detalhes sobre métricas de monitoramento, consulte Visualização de métricas de monitoramento de instâncias.

  2. Faça logon na instância de banco de dados e execute a seguinte instrução SQL para verificar as transações longas no sistema e os bloqueios de linha mantidos pelas transações:
    select trx_mysql_thread_id, trx_id, trx_state, trx_started, trx_tables_locked, trx_rows_locked, trx_isolation_level, trx_query, trx_operation_state from information_schema.innodb_trx order by trx_started;

    • information_schema.innodb_trx: informações sobre transações que estão sendo executadas no InnoDB.
    • trx_started: hora de início de uma transação, que é usada para determinar se a transação atual é uma transação longa. O tempo de execução de uma transação é a hora atual menos a hora de início.
    • trx_state: status da transação atual. Os valores são os seguintes:
      • RUNNING
      • LOCK WAIT

        Se o status de uma transação for LOCK WAIT, a transação manterá um bloqueio de linha.

      • ROLLING BACK
      • COMMITTING

Solução

Elimine as transações longas.