Glossaire des plans d'exécution PostgreSQL

Types de nœuds communs dans les plans d’exécution PostgreSQL:

  1. Sequential Scan (Seq Scan)

    • Description: Parcourt toutes les lignes d’une table une par une, sans utiliser d’index.
  2. Index Scan

    • Description: Accède aux lignes en utilisant un index pour retrouver rapidement les lignes correspondant à une condition.
  3. Index Only Scan

    • Description: Accède aux données uniquement via l’index, sans devoir consulter la table (utile lorsque toutes les données nécessaires se trouvent dans l’index).
  4. Bitmap Index Scan

    • Description: Utilise un index pour créer une carte bitmap des lignes correspondantes, puis récupère les lignes en bloc de manière plus efficace.
  5. Bitmap Heap Scan

    • Description: Utilise la carte bitmap créée par un Bitmap Index Scan pour récupérer les lignes en bloc à partir de la table principale.
  6. Tid Scan

    • Description: Utilise l’ID de tuple (TID) pour accéder directement à une ligne spécifique en fonction de son emplacement physique dans la table.
  7. CTE Scan

    • Description: Parcourt les résultats d’une expression de table commune (CTE), qui est un ensemble de résultats temporaires créés dans la même requête.
  8. Subquery Scan

    • Description: Parcourt les résultats d’une sous-requête incluse dans la requête principale.
  9. Function Scan

    • Description: Parcourt l’ensemble des résultats retournés par une fonction retournant un ensemble (set-returning function).
  10. Values Scan

  • Description: Parcourt un ensemble de valeurs spécifiées dans une requête, souvent utilisé avec la clause VALUES.
  1. Nested Loop Join
  • Description: Associe deux ensembles de données en parcourant chaque ligne d’un ensemble, puis en cherchant les correspondances dans l’autre ensemble.
  1. Hash Join
  • Description: Utilise une table de hachage pour joindre deux ensembles de données. Un ensemble est haché et l’autre est parcouru pour trouver des correspondances.
  1. Merge Join
  • Description: Associe deux ensembles de données en les fusionnant, en se basant sur un ordre trié.
  1. Aggregate
  • Description: Effectue des opérations d’agrégation telles que COUNT, SUM, AVG, etc.
  1. GroupAggregate
  • Description: Agrège les lignes en fonction de colonnes spécifiques.
  1. HashAggregate
  • Description: Utilise une table de hachage pour regrouper les lignes lors de l’agrégation.
  1. Sort
  • Description: Trie les lignes en fonction de colonnes spécifiées.
  1. Materialize
  • Description: Stocke les résultats intermédiaires en mémoire pour une réutilisation ultérieure dans la requête.
  1. Unique
  • Description: Supprime les doublons des résultats.
  1. SetOp
  • Description: Représente des opérations d’ensemble comme UNION, INTERSECT, ou EXCEPT.
  1. Limit
  • Description: Limite le nombre de lignes retournées par la requête (utilisé avec la clause LIMIT).
  1. Append
  • Description: Combine les résultats de plusieurs sous-requêtes ou tables (souvent utilisé avec des tables partitionnées).
  1. Recursive Union
  • Description: Exécute des requêtes récursives (des requêtes qui se réfèrent à elles-mêmes, souvent avec des CTE).
  1. WindowAgg (Window Function)
  • Description: Applique des fonctions de fenêtre, telles que ROW_NUMBER(), RANK(), ou LAG().
  1. Gather
  • Description: Regroupe les résultats de plusieurs travailleurs parallèles.
  1. Gather Merge
  • Description: Regroupe les résultats des travailleurs parallèles et les fusionne dans un ordre trié.
  1. Parallel Seq Scan
  • Description: Comme Seq Scan, mais exécuté par plusieurs travailleurs en parallèle.
  1. Parallel Index Scan
  • Description: Comme Index Scan, mais exécuté par plusieurs travailleurs en parallèle.
  1. Parallel Bitmap Heap Scan
  • Description: Comme Bitmap Heap Scan, mais exécuté par plusieurs travailleurs en parallèle.
  1. Parallel Hash Join
  • Description: Comme Hash Join, mais effectué en parallèle.
  1. InitPlan
  • Description: Représente une sous-requête ou une CTE qui doit être exécutée une fois pour produire un résultat utilisé dans d’autres parties du plan.
  1. Foreign Scan
  • Description: Parcourt des données provenant d’une source externe, comme une autre base de données ou une table étrangère.
  1. Custom Scan
  • Description: Un nœud de scan personnalisé, utilisé par les extensions ou les plugins pour définir de nouvelles méthodes de scan.
  1. Result
  • Description: Retourne un résultat constant ou une expression simple.
  1. ModifyTable
  • Description: Représente les opérations qui modifient les données telles que INSERT, UPDATE, ou DELETE.
  1. Parallel Append
  • Description: Similaire à Append, mais utilisé lorsque les résultats doivent être combinés en parallèle.
  1. Partial Aggregate
  • Description: Calcule des agrégations partielles sur plusieurs travailleurs parallèles.
  1. Parallel Hash
  • Description: Une version parallèle de la table de hachage, utilisée dans les Parallel Hash Joins ou les Parallel Hash Aggregates.
  1. Hash Batches
  • Description: Représente le nombre de lots utilisés lors d’une jointure de hachage ou d’une agrégation de hachage.
  1. LockRows
  • Description: Utilisé lorsque des lignes sont verrouillées par une requête SELECT FOR UPDATE ou similaire.
  1. Tid Range Scan
  • Description: Une variante du Tid Scan, optimisée pour parcourir une plage de tuples.

Termes de coût et de temps dans les plans PostgreSQL:

  1. Startup Cost

    • Description: Le coût pour commencer à exécuter le nœud (par exemple, pour récupérer la première ligne).
  2. Total Cost

    • Description: Le coût total pour exécuter le nœud, y compris le coût de démarrage et le traitement de toutes les lignes.
  3. Plan Rows

    • Description: Le nombre estimé de lignes que ce nœud retournera.
  4. Plan Width

    • Description: La taille estimée (en octets) de chaque ligne retournée par ce nœud.
  5. Actual Startup Time

    • Description: Le temps réel pris pour démarrer ce nœud.
  6. Actual Total Time

    • Description: Le temps réel pris pour compléter l’exécution de ce nœud.
  7. Actual Rows

    • Description: Le nombre réel de lignes retournées par ce nœud.
  8. Actual Loops

    • Description: Le nombre de fois que ce nœud a été exécuté (par exemple, dans une boucle imbriquée).

Autres termes clés:

  1. Filter

    • Description: Une condition appliquée aux lignes pendant l’exécution (souvent utilisée dans les clauses WHERE).
  2. Hash Cond

    • Description: La condition utilisée pour faire correspondre les lignes dans une jointure de hachage.
  3. Join Type

    • Description: Le type de jointure utilisé (par exemple, Inner, Left, Right, Full).
  4. Group Key

    • Description: Les colonnes ou expressions utilisées pour regrouper les lignes dans des opérations d’agrégation.
  5. Sort Key

    • Description: Les colonnes ou expressions utilisées pour trier les lignes.
  6. Recheck Cond

    • Description: Une condition à vérifier à nouveau lors d’un scan bitmap, souvent nécessaire car le scan bitmap peut récupérer plus de lignes que nécessaire.

Parallélisme et Buffers:

  1. Workers Launched

    • Description: Le nombre de processus parallèles lancés pour l’exécution de la requête.
  2. Shared Buffers

    • Description: Le nombre de pages lues à partir des buffers partagés (mémoire) pendant l’exécution de la requête.
  3. Temp Buffers

    • Description: Le nombre de pages temporaires utilisées pour trier ou agréger des données qui dépassent la mémoire.
  4. Exclusive Lock/Share Lock

    • Description: Des verrous sont acquis sur les tables lorsque les requêtes modifient ou lisent des données, afin d’assurer la cohérence et d’éviter les conflits.