Existe uma ferramenta para filtrar o log de consultas lentas do MySQL com base no banco de dados?

1

Atualmente, estou tentando ajustar o desempenho de um único banco de dados (na verdade, um conjunto de bancos de dados semelhantes), mas o log de consultas lentas tem muitos dados para outros bancos de dados nos quais não estou interessado no momento. Consegui encontrar alguns scripts de filtragem de logs lentos, mas nada que pareça realmente filtrar com base no nome do banco de dados.

Olhando através do arquivo de log (para 5.0.18), o nome do banco de dados parece estar aparecendo para cada bloco de consultas, então deve ser uma questão bastante simples de programação fazer essa filtragem (que é o que parece que eu vou fazer), mas por que ninguém (que eu posso encontrar) já fez isso se é tão fácil?

Por exemplo:

# Time: 090226 11:17:04
# User@Host: user1[user1] @ host [10.0.0.3]
# Query_time: 12  Lock_time: 0  Rows_sent: 2  Rows_examined: 4042564
use [db1];
SELECT ...
# Time: 090226 11:17:34
# User@Host: user1[user1] @ host [10.0.0.3]
# Query_time: 12  Lock_time: 0  Rows_sent: 0  Rows_examined: 4042560
SELECT ...
# Time: 090226 12:32:40
# User@Host: user2[user2] @ host [10.0.0.3]
# Query_time: 8  Lock_time: 0  Rows_sent: 123390  Rows_examined: 812841
use [db2];
SELECT ...

as duas primeiras consultas são ambas contra o mesmo banco de dados, portanto, a única instrução use abrange as duas.

    
por Cebjyre 08.02.2010 / 02:49

2 respostas

1

Eu finalmente encontrei mysqlsla e, depois de um pouco de patch (que eu enviei de volta para eles, mas ficarei feliz em colocar aqui se alguém quiser ele fez o meu lance.

    
por 08.02.2010 / 09:45
1

você pode usar este pequeno script awk para fazer o trabalho:

awk '{ if ($0 ~ /use \[.*\];/) { if ($2 ~ /db1/) { found = 1; } else { found = 0; }} if (found == 1) { print $0; }}' <mysqllogfile>

apenas substitua db1 pelo nome do banco de dados que você está procurando. quando você pegar seu exemplo acima, este script lhe dará:

use [db1];
SELECT ...
# Time: 090226 11:17:34
# User@Host: user1[user1] @ host [10.0.0.3]
# Query_time: 12  Lock_time: 0  Rows_sent: 0  Rows_examined: 4042560
SELECT ...
# Time: 090226 12:32:40
# User@Host: user2[user2] @ host [10.0.0.3]
# Query_time: 8  Lock_time: 0  Rows_sent: 123390  Rows_examined: 812841

Eu não sei qual é o seu sistema operacional, mas o awk / gawk está disponível para múltiplos sistemas operacionais.

    
por 08.02.2010 / 08:35