Estou tentando usar log_queries_not_using_indexes = 1
para encontrar consultas que não estão sendo executadas de maneira ideal em um servidor MySQL. No entanto, acho o arquivo de log resultante de valor bastante limitado. Aparentemente, as consultas são registradas sempre que o otimizador realmente decidiu não usar um índice como critério em uma cláusula WHERE. E não se eles realmente não tiverem índices correspondentes às colunas filtradas.
Então dada uma tabela com a seguinte estrutura
CREATE TABLE `test` (
`id_test` int(11) NOT NULL AUTO_INCREMENT,
`some_text` varchar(255) DEFAULT NULL,
`some_more_text` text,
PRIMARY KEY (`id_test`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
uma consulta SELECT id_test from test where id_test != 69
seria registrada no log lento por não usar índices (o otimizador decidiu que uma varredura de tabela é mais eficiente, pois não se pode ganhar muito usando um índice), mas SELECT id_test from test where id_test = 69
não.
Eu esperaria o comportamento da última consulta no primeiro caso, pois o índice está presente. Como está, torna a solução de problemas de índices ausentes bastante cansativa. Idéias sobre como abordar isso são muito apreciadas.
Não sei ao certo por que você esperava
log_queries_not_using_indexes=1
não registrar consultas que não usavam um índice. A ideia da configuração é ver quais consultas estão sendo executadas em seu servidor e podem ser candidatos ideais para otimização. Para o seu exemplo:A menos que você altere os requisitos da consulta, não há muito o que fazer. Claro que é mais rápido fazer uma varredura completa e retornar todas as linhas que não correspondem a esse
id_test
valor.Quanto às ideias sobre como abordar a análise:
Você pode definir
min_examined_row_limit
um valor mais alto. Se, por exemplo, você deseja excluir consultas que examinam menos de 5.000 linhas, defina esta variável como 5000. Isso é útil para reduzir o 'ruído' no log de consulta lento.Você pode usar uma ferramenta chamada
pt-query-digest
com a--review
opção de revisar suas consultas lentas. A ferramenta permite que você armazene seu histórico de revisões para não repetir o trabalho na mesma consulta durante a análise:Ele também tem o benefício adicional de armazenar um histórico das consultas registradas em sua consulta lenta. Quem não adoraria evidências históricas de melhorar suas consultas?