Analisando o "elefante" peça por peça

Se você depura regularmente o desempenho de consultas PostgreSQL e EXPLAIN (ANALYZE, BUFFERS) ...é sua ferramenta favorita para aprender sobre os recursos deste DBMS, então novos "chips" úteis de nosso serviço para visualização e análise de planos explain.tensor.ru certamente serão úteis nesta difícil tarefa.



Mas deixe-me lembrá-lo imediatamente de que sem o monitoramento completo e abrangente do banco de dados PostgreSQL, usar apenas a análise de plano é agir da posição do sábio # 5!





[ fonte KDPV , "The Blind and the Elephant" ]



, 1940





, ,



.

,

,

, .







, —

.



,

:



!



,

,

, ,

.



,

,

,

.



A contenda surgiu entre os cegos

E durou um ano inteiro.

Então os cegos finalmente

puseram as mãos em movimento.



E como o quinto era forte,

- Ele fechou a boca de todos.

E doravante o elefante consiste em

uma cauda!


Então, hoje no programa:



  • mude "divisas" para "alças"
  • nós reunimos "mega" planos
  • nós mantemos um arquivo pessoal
  • estudando a genealogia dos planos
  • espiando nas "janelas"


Nem uma única cor!



Historicamente, ao visualizar o plano, marcamos os nós "mais quentes" com uma "divisa" vertical à esquerda do valor - quanto mais alto o valor, mais rica é a cor.







Mas, nesse modelo, a proporção dos valores é mal percebida - por exemplo, um desvio de 30% na diferença de tons só pode ser percebido por um olho treinado. Portanto, fizemos um histograma a partir de "alças" horizontais.







Estatísticas úteis para "mega" planos



Muitas pessoas não percebem a guia "Estatísticas" do plano, aqui está à direita:





E quem percebeu - dificilmente usou ativamente. Decidimos corrigir essa omissão e torná-la realmente útil para a análise de planos "grandes" (mais de 100 nós).



Nós de agrupamento



Todos os nós do plano “idênticos” (ou seja, aqueles com o mesmo tipo de nó, tabela usada e índice) são agrupados em uma linha da tabela. Neste caso, somam-se todos os seus indicadores (tempo de execução, número de registros lidos e descartados, número total de passes e quantidade de dados lidos).



E para maior clareza, cada tipo de nó carrega um rótulo de cor:



  • vermelho - leitura de dados

    nós Seq Scan, Index Scan, CTE Scane várias outras... Scan
  • amarelas - INFORMÁTICA

    nós Sort, Unique, Aggregate, Group, Materialize, ...
  • verde - Ligação

    nós Nested Loop, Merge Join, Hash Join, ...




Classificando por qualquer indicador



Se de repente você precisar de uma análise não pelo tempo total, mas pelo tipo de nó, por exemplo - basta clicar no cabeçalho da coluna - e tudo será:







Dica de ferramenta de contexto de nó



Para entender em detalhes a contribuição de um nó específico em um grupo, passe o mouse sobre o número de qualquer um deles - e você verá a dica tradicional do que exatamente aconteceu lá:







Arquivo pessoal de planos

"Sem cadastro e sem SMS!"



Se você usa ativamente nosso serviço, agora será muito mais fácil encontrar seus planos analisados ​​anteriormente - basta mudar para a guia "mina" no arquivo . Os planos caem aqui independentemente da publicação no arquivo geral e são visíveis apenas para você.





Genealogia de planos



Anteriormente, era muito difícil encontrar um plano específico no arquivo, agora é simples. Eles podem ser nomeados e agrupados em uma “árvore genealógica” de otimização!



Basta especificar um nome ao adicionar um plano:







... ou em um plano existente, você pode defini-lo, editar ou adicionar um plano vinculado:







Em seguida, você pode alternar rapidamente pela árvore de opções para avaliar o efeito de certas otimizações:







E se um link para um plano específico repentinamente perdido, ele pode ser facilmente identificado por seu nome em seu arquivo pessoal:





Nós olhamos para as "janelas"



Um pequeno, mas útil, aprimoramento do Query Profiler , sobre o qual escrevi anteriormente - nós o ensinamos a "olhar para as janelas" e mapear corretamente os nós do plano:



->  WindowAgg   ==>  WINDOW / OVER
      ->  Sort  ==>    PARTITION BY / ORDER BY


... como várias definições independentes de "janela" ( WINDOW) dentro de uma solicitação:







... e classificação em funções de janela sem uma definição explícita:







Boa caça para várias ineficiências!



All Articles