2 de agosto de 2021

Analisando queries no PostgreSQL

O banco de dados é uma das partes mais importantes de qualquer aplicação e da mesma forma que as linguagens de programação que usamos, as vezes é necessário depurar o que está acontecendo dentro dele.

Uma das coisas que sempre devemos fazer ao digitar uma query nova que será utilizada pelo nosso programa é analisar o seu custo computacional no banco. Para conseguirmos fazer isso no PostgreSQL basta ativarmos uma diretriz antes da query (usaremos um banco de dados de filmes como exemplos que peguei aqui):

EXPLAIN ANALYZE select *  from film f inner join "language" l on f.language_id = l.language_id  where l."name" = 'english'

Como podemos ver o retorno da query acima deixou de ser os resultados da tabela propriamente dita e passou a ser a estratégia de execução da query. No caso aqui o que aconteceu foi primeiro um escaneamento sequêncial da tabela languages para depois fazer a junção com a tabela film através dos hashes gerados em cada operação.

Essa análise já é completa, mas aprendendo mais sobre o significado dos resultados eu encontrei uma ferramenta excelente que ajuda a fazer uma análise mais visual do retorno do explain, este excelente site permite fazer uma análise mais gráfica e compartilhável da query.

Já entrando no site podemos ver algumas instrução, primeiro é necessário acrescentarmos algumas diretivas no comando explain para formatar da maneira adequada para a leitura:

EXPLAIN (ANALYZE, COSTS, VERBOSE, BUFFERS, FORMAT JSON) select *  from film f inner join "language" l on f.language_id = l.language_id  where l."name" = 'english' ;

Após isso também colamos a query sendo analisada (muito cuidado aqui para não expor nenhuma informação que você não deva) e podemos dar um título para nossa análise. Agora enviamos e recebemos um gráfico muito interessante sobre as etapas de execução, os índices utilizados e muitas informações.

Cada operação tem seus detalhes descrito em cada caixa
Como podemos ver na imagem as coisas ficam bem mais interessantes de serem analisadas. Além de todas as informações que já tinhamos antes no modo de texto também temos explicações sobre cada operação, como a geração de hashes dos registros para fazer um hash join ao final da operação. Também temos informações sobre custos, tempos de cada etapa e muito mais. Além disso também é gerado um link compartilhável, para acessar o que utilizamos nesta análise você pode clicar aqui (lembre-se de não colocar informações sensíveis na sua query pois isso irá para a internet).

Nenhum comentário:

Postar um comentário