Estou tentando entender como interpretar melhor o tempo de bloqueio para as consultas que aparecem em nosso log de consultas lentas do MySQL.
Por exemplo, se uma consulta UPDATE tiver um tempo de bloqueio de 10 segundos. 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 própria ação UPDATE, o relógio deve estar correndo, pois está bloqueando todas as consultas SELECT que se alinharam após a consulta UPDATE.
E quanto aos bloqueios de consulta SELECT. Por que algumas consultas selecionadas têm tempos de bloqueio? É porque há uma consulta UPDATE em andamento, portanto, eles estão bloqueando uma tabela juntos.
O
lock_time
no log de consulta lenta é, na verdade, a quantidade de tempo que a consulta gastou esperando para adquirir o bloqueio necessário para ser executada. Por exemplo,UPDATES
as consultas 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 em nível de linha e bloqueará apenas as linhas que estão sendo alteradas. MyISAM bloqueará toda a tabela até que a atualização/inserção/exclusão seja concluída.
O bloqueio de toda a tabela para MyISAM é um grande motivo
SELECT
para as consultas terem um lock_time em seu log de consulta lento.