Como devo interpretar o "tempo de bloqueio" no log de consultas lentas do mysql?

12

Estou tentando entender como melhor interpretar o tempo de bloqueio para as consultas que aparecem no nosso log de consultas lentas do MySQL.

Por exemplo, se uma consulta UPDATE tiver 10 segundos de tempo de bloqueio. Presumo que seja o tempo total após a consulta de atualização adquirir o bloqueio. Mesmo que esteja aguardando a conclusão das consultas de seleção anteriores, mas não executando a ação UPDATE, o relógio deve estar correndo, pois está bloqueando todas as consultas SELECT alinhadas após a consulta UPDATE.

E quanto aos bloqueios de consulta SELECT. Como algumas consultas selecionadas têm tempos de bloqueio? É porque há uma consulta UPDATE a seguir, portanto, eles estão bloqueando uma tabela juntos.

Haluk
fonte

Respostas:

19

O lock_timelog de consultas lentas é, na verdade, o tempo que a consulta passou aguardando para adquirir o bloqueio necessário para executar. Por exemplo, as UPDATESconsultas precisam de um bloqueio de gravação.

O bloqueio também depende do mecanismo de armazenamento que você está usando na tabela. Ao escrever, o InnoDB usará o bloqueio no nível da linha e bloqueará apenas as linhas que estão sendo alteradas. O MyISAM irá bloquear a tabela inteira até que a atualização / inserção / exclusão seja concluída.

O bloqueio de toda a tabela para o MyISAM é um grande motivo para as SELECTconsultas terem um tempo de bloqueio no seu log de consultas lentas.

Derek Downey
fonte