Existe algum software (preferencialmente de código aberto) que possa analisar um PostgreSQL EXPLAIN e recomendar os índices necessários para acelerar a consulta?
Existe algum software (preferencialmente de código aberto) que possa analisar um PostgreSQL EXPLAIN e recomendar os índices necessários para acelerar a consulta?
Respostas:
Eu literalmente acabei de encontrar isso alguns minutos atrás: http://explain.depesz.com/ . Você cola os resultados da sua EXPLAIN ANALYZE e ela mostra onde pode haver problemas (é até codificado por cores).
Na seção de ajuda ...
Explicar.depesz.com é uma ferramenta para encontrar uma causa real para consultas lentas. Geralmente, alguém usaria a consulta EXPLAIN ANALYZE; e leia a saída. O problema é que nem todas as partes da saída são facilmente compreensíveis por ninguém, e nem sempre é óbvio se o nó que é executado em 17,3ms é mais rápido ou mais lento que o que é executado em 100ms - dado o fato de o primeiro ser executado 7 vezes. Para usar o site, basta ir para a primeira página e colar lá, explicar analisar a saída do seu psql. Esta saída pode ser assim. Após o upload, você será direcionado para a página que é analisada e bem (bem, pelo menos agradável para mim :) colorida para colocar ênfase em partes importantes. Isso pode ser assim. Nota lateral: o URL da saída colorida é persistente, então você pode simplesmente usá-lo para mostrá-lo a outras pessoas - por exemplo - para aqueles caras legais no canal irc #postgresql no freenode. Este gráfico usa 4 cores para marcar coisas importantes: fundo branco - está tudo bem fundo amarelo - dado nó é preocupante fundo marrom - dado nó é mais preocupante fundo vermelho - dado nó é muito preocupante Qual cor é usada, é escolhida com base em qual modo você usará: "Exclusivo", "Inclusivo" ou "Linhas X".
Não conheço nenhuma ferramenta do Postgres que faça isso algoritmicamente e, na minha opinião, o cérebro humano (e muitas vezes um pouco de experimentação em um ambiente de desenvolvimento) é realmente a única ferramenta apropriada aqui. Existem muitos fatores envolvidos, incluindo se o planejador de consultas achará ou não o seu índice - algo que é determinado pela maneira como sua instalação ajustou as configurações do planejador de consultas e o tamanho / estatísticas na tabela envolvida ( s)
A melhor recomendação que posso fazer é fazer um EXPLAIN ANALYZE
(o ANALYZE
é importante - ele fornecerá consultas e subplanos de tempo de execução), analise os resultados e ataque o maior número que você vê primeiro. Você provavelmente poderia escrever um analisador para interromper a saída EXPLAIN (especialmente na versão 9.0 com saída JSON), mas não conheço ninguém que tenha resolvido isso ainda (isso é basicamente o que os otimizadores para MS-SQL fazem ...)
Nada de nota de produção, mas para os curiosos, existe / havia um projeto de pesquisa para implementar algo assim. Procure por "consultor de índice PostgreSQL".