log de consultas lentas eliminadas antes da conclusão

4

Aparentemente, um dos meus colegas matou um servidor Web que estava fazendo o MySQL travar (bloqueando outras consultas), em vez de matar a consulta específica, e muito cuidado especial foi tomado por ele para esquecer quaisquer detalhes sobre a consulta que estava bloqueando o resto . Eu gostaria de poder dizer que esta foi a primeira vez que isso aconteceu, mas é sobre cada 2 a 4 meses (intervalos irregulares, infelizmente, sem informações), e eu gostaria muito de ter a habilidade de registrar consultas demorando muito tempo, seja eles completam ou não.

Agora, para consultas bem-sucedidas, temos o log de consultas lentas perfeitamente viável, mas só termina quando é concluído, e não se é eliminado durante a consulta. Existe uma solução interna para registrar consultas enquanto elas ainda estão em execução? Por enquanto, estou recorrendo à execução de um daemon / script consultando isso a cada 10 segundos:

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST 
WHERE TIME > 30 
AND USER != 'replication'
AND USER != 'system user'
AND USER != 'DELAYED'
AND COMMAND != 'Sleep'
AND ID != CONNECTION_ID();

... mas parece meio estranho, e eu me pergunto se há uma possibilidade embutida que negligenciei?

    
por Wrikken 10.08.2012 / 20:22

2 respostas

2

Experimente pt-query-digest --processlist h=host1 --print --no-report como descrito aqui . Eu nunca tentei fazer um resumo em um servidor live e só o usei para processar um log lento existente, mas esta parece ser a ferramenta que você precisa. Você precisará instalar o Percona Toolkit.

    
por 10.08.2012 / 20:41
1

Embora isso envolva o uso de um segundo software (do mesmo fornecedor), você deve considerar colocar um MySQL Proxy na frente do seu servidor, e usando as capacidades muito extensas dele para registrar os horários de início e término das consultas, mesmo se elas forem canceladas pelo servidor.

    
por 11.08.2012 / 17:25

Tags