Analyser "l'éléphant" morceau par morceau

Si vous dĂ©boguez rĂ©guliĂšrement les performances des requĂȘtes PostgreSQL , et que EXPLAIN (ANALYZE, BUFFERS) ...vous ĂȘtes votre outil prĂ©fĂ©rĂ© pour dĂ©couvrir les particularitĂ©s de ce SGBD, alors de nouvelles "puces" utiles de notre service de visualisation et d'analyse des plans explic.tensor.ru vous seront certainement utiles dans cette tĂąche difficile.



Mais laissez-moi vous rappeler tout de suite que sans une surveillance complÚte et complÚte de la base de données PostgreSQL, utiliser uniquement l'analyse de plan, c'est agir à partir de la position de sage # 5!





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



, 1940





, ,



.

,

,

, .







, —

.



,

:

—

!



,

,

, ,

.



,

,

,

.



Des conflits ont éclaté parmi les aveugles

et ont duré une année entiÚre.

Puis les aveugles

ont enfin mis leurs mains en mouvement.



Et comme le cinquiĂšme Ă©tait fort,

Il a fermé la bouche de tout le monde.

Et désormais l'éléphant se compose d'

une queue!


Alors, aujourd'hui au programme:



  • remplacer "chevrons" par "bretelles"
  • nous rassemblons des "mĂ©ga" plans
  • nous gardons une archive personnelle
  • Ă©tudier la gĂ©nĂ©alogie des plans
  • regarder dans les "fenĂȘtres"


Pas une seule couleur!



Historiquement, lors de la visualisation du plan, nous avons marquĂ© les nƓuds "les plus chauds" avec un "chevron" vertical Ă  gauche de la valeur - plus la valeur est Ă©levĂ©e, plus la couleur est riche.







Mais dans un tel modĂšle, le rapport des valeurs est mal perçu - par exemple, un Ă©cart de 30% dans la diffĂ©rence de nuances ne peut ĂȘtre remarquĂ© que par un Ɠil averti. Par consĂ©quent, nous avons fait un histogramme Ă  partir de "bretelles" horizontales.







Statistiques utiles pour les "méga" plans



Beaucoup de gens ne remarquent pas l'onglet «Statistiques» du plan, le voici à droite:





Et celui qui l'a remarquĂ© - l'a Ă  peine utilisĂ©. Nous avons dĂ©cidĂ© de corriger cette omission et de la rendre vraiment utile pour analyser les plans «volumineux» (plus de 100 nƓuds).



Regroupement des nƓuds



Tous les nƓuds de plan "identiques" (c'est-Ă -dire ceux qui ont le mĂȘme type de nƓud, la mĂȘme table utilisĂ©e et le mĂȘme index) sont regroupĂ©s dans une ligne de table. Dans ce cas, tous leurs indicateurs (temps d'exĂ©cution, nombre d'enregistrements lus et rejetĂ©s, le nombre total de passes et la quantitĂ© de donnĂ©es lues) sont additionnĂ©s.



Et pour plus de clartĂ©, chaque type de nƓud porte une Ă©tiquette de couleur:



  • rouge - la lecture des donnĂ©es

    noeuds Seq Scan, Index Scan, CTE Scanet divers autres... Scan
  • jaune - traitement des donnĂ©es

    noeuds Sort, Unique, Aggregate, Group, Materialize, ...
  • vert - connexion

    nƓuds Nested Loop, Merge Join, Hash Join, ...




Tri selon n'importe quel indicateur



Si soudainement vous avez besoin d'une analyse non pas par le temps total, mais par le type de nƓud, par exemple - cliquez simplement sur l'en-tĂȘte de colonne - et tout sera:







Indice de nƓud contextuel



Pour comprendre en dĂ©tail la contribution d'un nƓud spĂ©cifique dans le groupe, survolez le nombre de l'un d'entre eux - et vous verrez l'indication traditionnelle de ce qui s'y est exactement passĂ©:







Archives personnelles des plans

"Sans inscription et SMS!"



Si vous utilisez activement notre service, il sera maintenant beaucoup plus facile de trouver vos plans précédemment analysés - il vous suffit de passer à l'onglet «mine» dans l'archive . Les plans tombent ici indépendamment de la publication dans les archives générales et ne sont visibles que par vous.





Généalogie des plans



Auparavant, il Ă©tait assez difficile de trouver un spĂ©cifique de vos plans dans les archives, maintenant c'est simple. Ils peuvent ĂȘtre nommĂ©s et regroupĂ©s dans un «arbre gĂ©nĂ©alogique» d'optimisations!



Il suffit de spécifier un nom lors de l'ajout d'un plan:







... ou sur un plan existant, vous pouvez le définir, modifier ou ajouter un plan lié:







Ensuite, vous pouvez rapidement basculer dans l'arborescence des options afin d'Ă©valuer l'effet de certaines optimisations:







Et si un lien vers un plan spĂ©cifique soudainement perdu, il peut ĂȘtre facilement identifiĂ© par son nom dans ses archives personnelles:





Nous scrutons les "fenĂȘtres"



Une petite mais utile amĂ©lioration de Query Profiler , dont j'ai parlĂ© plus tĂŽt - nous lui avons appris Ă  «regarder dans les fenĂȘtres» et Ă  mapper correctement les nƓuds de planification:



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


... comme plusieurs dĂ©finitions indĂ©pendantes de "window" ( WINDOW) dans une seule requĂȘte:







... et le tri dans les fonctions de fenĂȘtre sans dĂ©finition explicite:







Bonne chasse aux différentes inefficacités!



All Articles