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
noeudsSeq Scan
,Index Scan
,CTE Scan
et divers autres... Scan
- jaune - traitement des données
noeudsSort
,Unique
,Aggregate
,Group
,Materialize
, ... - vert - connexion
nĆudsNested 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!