Como verificar qual consulta causou o bloqueio

1

Eu tenho alguns problemas com meus aplicativos de servidor e, algumas vezes, algumas tabelas são bloqueadas e, em seguida, recebo milhares de consultas aguardando a tabela ser desbloqueada. Mas isso não vai acontecer. Existe alguma maneira de verificar qual consulta poderia causar o bloqueio?

    
por Balon 24.04.2011 / 23:08

1 resposta

3

Acho que show processlist; é a melhor maneira de começar a depurar esse problema. show processlist mostra quais encadeamentos estão em execução e seu estado.

Você também pode usar o comando Explain , especialmente em sua maioria consultas comuns. Isso mostrará o plano de execução das consultas desejadas. Possivelmente, algumas das consultas não têm índices ou não estão sendo usadas corretamente.

Por outro lado, você provavelmente está usando o mecanismo de armazenamento MyISAM. Se você não precisa de pesquisas de texto completo (ou outros recursos específicos do MyISAM), eu recomendo que você migre para o InnoDB, que fornece bloqueios baseados em linha em vez de bloquear a tabela inteira, entre outros recursos, o que provavelmente melhorará o desempenho de seu MySQL. Aqui está uma boa comparação entre MyISAM e InnoDB .

Possivelmente, você também precisa ajustar algumas de suas variáveis do MySQL. Recomendamos que você ajuste o key_buffer_size , que é o tamanho do buffer usado para blocos de índice. Ajuste isso para pelo menos 30% da sua RAM ou o processo de re-indexação provavelmente será muito lento.

Por último, mas não menos importante, ative o log de consultas lentas . Isso mostrará quais consultas estão demorando muito para serem executadas.

Espero que isso ajude!

    
por 24.04.2011 / 23:35

Tags