Estamos tentando fazer uma depuração do desempenho do servidor e gostaria de capturar um instantâneo das consultas que estão sendo executadas em nosso servidor MySQL por um período de alguns minutos.
Eu estou familiarizado com o MySQL SHOW FULL PROCESSLIST
, no entanto, gostaria de poder executar isso através da linha de comando para que eu possa despejá-lo em um arquivo e processá-lo posteriormente.
Existe uma maneira de gerar essa consulta em um arquivo e executá-la a cada segundo?
Existe uma maneira melhor de capturar todas as consultas que estão sendo executadas?
Observe que não estou interessado apenas nas consultas lentas (estou familiarizado com o log de consultas lentas).
echo show full processlist | mysql
ou melhor fazerSELECT info FROM information_schema.processlist WHERE Command="Query" AND User!="root"
um loop no bash. Adicione algumas linhas e você obterá a mesma funcionalidade de consulta queinnotop
oupt-kill
Respostas:
Eu usaria o log de consulta lenta. Ele captura todas as consultas, não apenas as lentas, se você definir long_query_time = 0.
Ele também captura TODAS as consultas, o que não se aplica às técnicas de detecção de TCP mencionadas aqui; esses não capturam consultas executadas por um soquete. O mesmo vale para assistir a SHOW PROCESSLIST; você perderá consultas de execução rápida.
Se você deseja capturar consultas através da lista de processos ou do tráfego TCP, sugiro usar o pt-query-digest do Percona Toolkit. Ele pode pesquisar a lista de processos para você (e fazer sentido com os resultados, o que é muito difícil de fazer se você estiver capturando várias amostras dela) e pode interpretar o protocolo TCP do MySQL, para que você possa pegar alguns TCP. trafique e analise-o. Claro, também é o melhor agregador / gerador de perfil / repórter de consultas já escrito, mas você não disse o que deseja fazer com as consultas depois de capturá-las.
fonte
A maneira mais robusta seria usar o "log de consultas gerais", que capturará todas as consultas: http://dev.mysql.com/doc/refman/5.1/en/query-log.html
Você não especifica a versão do servidor MySQL, mas se você possui o 5.1.12 ou posterior, é possível ativar e desativar isso com uma variável global por meio do SQL; Veja a documentação para detalhes.
fonte
Tente este comando como root (ou use
sudo
):Encontrado http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/
fonte
Certo:
Felicidades
fonte
Este pode ser um local para o Proxy Mysql . Basicamente, você pode capturar (e manipular) as consultas enviadas. Uma configuração básica para interceptar é bastante fácil. Em seguida, basta alterar a configuração do cliente para apontar para o proxy para capturar todas as solicitações.
fonte
O programa Wireshark baseado em terminal tshark pode ajudar:
sudo yum install wireshark
lhe dará o tshark no Amazon Linux esudo apt-get install tshark
o tshark no Ubuntu 14+fonte
Usei a solução de 'Rui Pedro Bernardino. Funciona muito bem, exceto que eu mudei algumas coisas na primeira linha, conforme detalhado abaixo ...
fonte
Capture sessões do mysql tcp usando tcpdump, consultas e respostas. Você pode analisar um dump, por exemplo, usando as ferramentas do maatkit:
http://www.maatkit.org/doc/mk-tcp-model.html
http://www.maatkit.org/doc/mk-query-digest.html
fonte
Eu estava pesquisando e pesquisando e finalmente cheguei ao MONyog para monitorar todas as consultas em tempo real que são executadas no servidor mysql. A única coisa a ser observada é a tabela "Performance_schema" e "declarações_digest" que deve ser ativada e o Performance_schema é disponível com o MySQL 5.6.14 e superior.
fonte