Glossaire des plans d'exécution PostgreSQL
Types de nœuds communs dans les plans d’exécution PostgreSQL:
Sequential Scan (Seq Scan)
- Description: Parcourt toutes les lignes d’une table une par une, sans utiliser d’index.
Index Scan
- Description: Accède aux lignes en utilisant un index pour retrouver rapidement les lignes correspondant à une condition.
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).
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.
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.
- Description: Utilise la carte bitmap créée par un
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.
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.
Subquery Scan
- Description: Parcourt les résultats d’une sous-requête incluse dans la requête principale.
Function Scan
- Description: Parcourt l’ensemble des résultats retournés par une fonction retournant un ensemble (set-returning function).
Values Scan
- Description: Parcourt un ensemble de valeurs spécifiées dans une requête, souvent utilisé avec la clause
VALUES
.
- 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.
- 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.
- Merge Join
- Description: Associe deux ensembles de données en les fusionnant, en se basant sur un ordre trié.
- Aggregate
- Description: Effectue des opérations d’agrégation telles que
COUNT
,SUM
,AVG
, etc.
- GroupAggregate
- Description: Agrège les lignes en fonction de colonnes spécifiques.
- HashAggregate
- Description: Utilise une table de hachage pour regrouper les lignes lors de l’agrégation.
- Sort
- Description: Trie les lignes en fonction de colonnes spécifiées.
- Materialize
- Description: Stocke les résultats intermédiaires en mémoire pour une réutilisation ultérieure dans la requête.
- Unique
- Description: Supprime les doublons des résultats.
- SetOp
- Description: Représente des opérations d’ensemble comme
UNION
,INTERSECT
, ouEXCEPT
.
- Limit
- Description: Limite le nombre de lignes retournées par la requête (utilisé avec la clause
LIMIT
).
- Append
- Description: Combine les résultats de plusieurs sous-requêtes ou tables (souvent utilisé avec des tables partitionnées).
- 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).
- WindowAgg (Window Function)
- Description: Applique des fonctions de fenêtre, telles que
ROW_NUMBER()
,RANK()
, ouLAG()
.
- Gather
- Description: Regroupe les résultats de plusieurs travailleurs parallèles.
- Gather Merge
- Description: Regroupe les résultats des travailleurs parallèles et les fusionne dans un ordre trié.
- Parallel Seq Scan
- Description: Comme
Seq Scan
, mais exécuté par plusieurs travailleurs en parallèle.
- Parallel Index Scan
- Description: Comme
Index Scan
, mais exécuté par plusieurs travailleurs en parallèle.
- Parallel Bitmap Heap Scan
- Description: Comme
Bitmap Heap Scan
, mais exécuté par plusieurs travailleurs en parallèle.
- Parallel Hash Join
- Description: Comme
Hash Join
, mais effectué en parallèle.
- 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.
- Foreign Scan
- Description: Parcourt des données provenant d’une source externe, comme une autre base de données ou une table étrangère.
- 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.
- Result
- Description: Retourne un résultat constant ou une expression simple.
- ModifyTable
- Description: Représente les opérations qui modifient les données telles que
INSERT
,UPDATE
, ouDELETE
.
- Parallel Append
- Description: Similaire à
Append
, mais utilisé lorsque les résultats doivent être combinés en parallèle.
- Partial Aggregate
- Description: Calcule des agrégations partielles sur plusieurs travailleurs parallèles.
- Parallel Hash
- Description: Une version parallèle de la table de hachage, utilisée dans les
Parallel Hash Joins
ou lesParallel Hash Aggregates
.
- Hash Batches
- Description: Représente le nombre de lots utilisés lors d’une jointure de hachage ou d’une agrégation de hachage.
- LockRows
- Description: Utilisé lorsque des lignes sont verrouillées par une requête
SELECT FOR UPDATE
ou similaire.
- 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:
Startup Cost
- Description: Le coût pour commencer à exécuter le nœud (par exemple, pour récupérer la première ligne).
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.
Plan Rows
- Description: Le nombre estimé de lignes que ce nœud retournera.
Plan Width
- Description: La taille estimée (en octets) de chaque ligne retournée par ce nœud.
Actual Startup Time
- Description: Le temps réel pris pour démarrer ce nœud.
Actual Total Time
- Description: Le temps réel pris pour compléter l’exécution de ce nœud.
Actual Rows
- Description: Le nombre réel de lignes retournées par ce nœud.
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:
Filter
- Description: Une condition appliquée aux lignes pendant l’exécution (souvent utilisée dans les clauses
WHERE
).
- Description: Une condition appliquée aux lignes pendant l’exécution (souvent utilisée dans les clauses
Hash Cond
- Description: La condition utilisée pour faire correspondre les lignes dans une jointure de hachage.
Join Type
- Description: Le type de jointure utilisé (par exemple,
Inner
,Left
,Right
,Full
).
- Description: Le type de jointure utilisé (par exemple,
Group Key
- Description: Les colonnes ou expressions utilisées pour regrouper les lignes dans des opérations d’agrégation.
Sort Key
- Description: Les colonnes ou expressions utilisées pour trier les lignes.
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:
Workers Launched
- Description: Le nombre de processus parallèles lancés pour l’exécution de la requête.
Shared Buffers
- Description: Le nombre de pages lues à partir des buffers partagés (mémoire) pendant l’exécution de la requête.
Temp Buffers
- Description: Le nombre de pages temporaires utilisées pour trier ou agréger des données qui dépassent la mémoire.
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.