EXPLAIN - Amazon Redshift

EXPLAIN

Affiche le plan d'exécution d'une instruction de requête sans exécution de la requête.

Syntax

EXPLAIN [ VERBOSE ] query

Parameters

VERBOSE

Affiche le plan de requête complet au lieu d'un simple résumé.

query

Instruction de la requête à expliquer. La requête peut être une instruction SELECT, INSERT, CREATE TABLE AS, UPDATE ou DELETE.

Notes d'utilisation

Les performances d'EXPLAIN sont parfois influencées par le temps nécessaire à la création de tables temporaires. Par exemple, une requête qui utilise l'optimisation courante des sous-expressions nécessite la création et l'analyse de tables temporaires pour renvoyer la sortie EXPLAIN. Le plan de requête dépend du schéma et des statistiques des tables temporaires. Par conséquent, la commande EXPLAIN pour ce type de requête peut prendre plus de temps pour s'exécuter que prévu.

Vous pouvez utiliser EXPLAIN uniquement pour les commandes suivantes :

  • SELECT

  • SELECT INTO

  • CREATE TABLE AS

  • INSERT

  • MISE A JOUR

  • DELETE

La commande EXPLAIN échoue si vous l'utilisez pour d'autres commandes SQL, telles que le langage de définition de données (DDL) ou les opérations de base de données.

Étapes de planification et d'exécution de la requête

Le plan d'exécution d'une instruction de requête Amazon Redshift spécifique ventile l'exécution et le calcul d'une requête en une séquence discrète d'étapes et d'opérations de table qui produisent un ensemble de résultats final pour la requête. Pour plus d'informations sur la planification des requêtes, veuillez consulter Traitement des requêtes.

Le tableau suivant fournit un résumé des étapes qu'Amazon Redshift peut utiliser dans le développement d'un plan d'exécution dans le cas d'une requête qu'un utilisateur soumet pour l'exécution.

Opérateurs EXPLAIN Étapes de l'exécution d'une requête Description
SCAN :
Analyse séquentielle scan Opérateur ou étape d'analyse de table ou d'analyse de relation Amazon Redshift. Analyse toute la table de manière séquentielle du début à la fin ; analyse aussi les contraintes de requête pour chaque ligne (Filter) si la clause WHERE est spécifiée. Permet aussi d'exécuter les instructions INSERT, UPDATE et DELETE.
JOINS : Amazon Redshift utilise différents opérateurs de jointure basés sur la conception physique des tables jointes, l'emplacement des données requises pour la jointure et les attributs spécifiques de la requête elle-même. Analyse de sous-requête : l'analyse et l'ajout de sous-requête permettent d'exécuter les requêtes UNION.
Boucle imbriquée nloop Jointure la moins optimale ; principalement utilisée pour les jointures croisées (produits cartésiens, sans condition de jointure) et certaines jointures d'inégalité.
Joindre par hachage hjoin Également utilisé pour les jointures internes et les jointures externes gauche et droite, et généralement plus rapide qu'une jointure de boucle imbriquée. La jointure de hachage lit la table externe, hache la colonne de jointure et recherche les correspondances de la table de hachage interne. L'étape peut déverser sur le disque. (L'entrée interne de hjoin est une étape de hachage qui peut être basée sur le disque.)
Joindre par fusion mjoin Également utilisé pour les jointures internes et les jointures externes (pour les tables de jointure qui sont distribuées et triées sur les colonnes de jointure). Généralement, l'algorithme de jointure Amazon Redshift le plus rapide, sans inclure d'autres considérations de coût.
AGGREGATION : opérateurs et étapes utilisés pour les requêtes impliquant les fonctions d'agrégation et les opérations GROUP BY.
Regrouper aggr Opérateur/étape pour les fonctions d'agrégation scalaires.
HashAggregate aggr Opérateur/étape pour les fonctions d'agrégation groupées. Peut fonctionner à partir du disque en raison du déversement de la table de hachage sur le disque.
GroupAggregate aggr Opérateur parfois choisi pour les requêtes agrégation groupées si le paramètre de configuration Amazon Redshift pour le paramètre force_hash_grouping est désactivé.
SORT : opérateurs et étapes utilisés lorsque les requêtes doivent trier ou fusionner des jeux de résultats.
Tri sort Exécute le tri spécifiée par la clause ORDER BY ainsi que d'autres opérations telles que les jointures et UNION. Peut fonctionner à partir du disque.
Fusionner merge Produit les résultats finaux triés d'une requête basée sur les résultats intermédiaires triés provenant d'opérations effectuées en parallèle.
Opérations EXCEPT, INTERSECT et UNION :
SetOp Except [Distinct] hjoin Utilisé pour les requêtes EXCEPT. Peut fonctionner à partir du disque en fonction du fait que l'entrée de hachage peut être basée sur le disque.
Hash Intersect [Distinct] hjoin Utilisé pour les requêtes INTERSECT. Peut fonctionner à partir du disque en fonction du fait que l'entrée de hachage peut être basée sur le disque.
Append [All |Distinct] enregistrer Utilisé avec l'analyse de sous-requête pour implémenter les requêtes UNION et UNION ALL. Peut fonctionner à partir du disque grâce à « save ».
Divers/autres :
Hachage hash Utilisé pour les jointures internes et les jointures externes gauche et droite (fournit une entrée à une jointure de hachage). L'opérateur de hachage crée la table de hachage pour la table interne d'une jointure. (La table interne est celle dans laquelle les correspondances sont vérifiées et, dans une jointure de deux tables, elle est généralement la plus petite des deux.)
Limite limit Évalue la clause LIMIT.
Materialize enregistrer Matérialise les lignes pour l'entrée des jointures de boucles imbriquées et quelques autres jointures de fusion. Peut fonctionner à partir du disque.
-- parse Utilisé pour analyser les données d'entrée texte pendant un chargement.
-- project Permet de réorganiser les colonnes et les expressions de calcul, à savoir les données du projet.
Résultat -- Exécute les fonctions scalaires qui n'impliquent pas un accès aux tables.
-- return renvoie les lignes au principal ou au client.
Subplan -- Utilisé pour certaines sous-requêtes.
Unique unique Supprime les doublons des requêtes SELECT DISTINCT et UNION.
Fenêtre window Fonctions d'agrégation de calcul et de fenêtrage de classement. Peut fonctionner à partir du disque.
Opérations de réseau :
Network (Broadcast) bcast Broadcast est également un attribut des opérateurs et des étapes Join Explain.
Network (Distribute) dist Distribue les lignes sur les nœuds de calcul pour le traitement parallèle par cluster d'entrepôt de données.
Network (Send to Leader) return Renvoie les résultats vers le principal en vue d'un traitement ultérieur.
Opérations DML (opérateurs qui modifient les données) :
Insert (using Result) insert Insère les données.
Delete (Scan + Filter) delete Supprime les données. Peut fonctionner à partir du disque.
Update (Scan + Filter) delete, insert Implémenté comme Delete et Insert.

Examples

Note

Pour ces exemples, l'exemple de sortie peut varier selon la configuration d'Amazon Redshift.

L'exemple suivant renvoie le plan de requête pour une requête qui sélectionne EVENTID, EVENTNAME, VENUEID et VENUENAME à partir des tables EVENT et VENUE :

explain select eventid, eventname, event.venueid, venuename from event, venue where event.venueid = venue.venueid;
QUERY PLAN -------------------------------------------------------------------------- XN Hash Join DS_DIST_OUTER (cost=2.52..58653620.93 rows=8712 width=43) Hash Cond: ("outer".venueid = "inner".venueid) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=23) -> XN Hash (cost=2.02..2.02 rows=202 width=22) -> XN Seq Scan on venue (cost=0.00..2.02 rows=202 width=22) (5 rows)

L'exemple suivant renvoie le plan de requête pour la même requête avec la sortie des commentaires :

explain verbose select eventid, eventname, event.venueid, venuename from event, venue where event.venueid = venue.venueid;
QUERY PLAN -------------------------------------------------------------------------- {HASHJOIN :startup_cost 2.52 :total_cost 58653620.93 :plan_rows 8712 :plan_width 43 :best_pathkeys <> :dist_info DS_DIST_OUTER :dist_info.dist_keys ( TARGETENTRY { VAR :varno 2 :varattno 1 ... XN Hash Join DS_DIST_OUTER (cost=2.52..58653620.93 rows=8712 width=43) Hash Cond: ("outer".venueid = "inner".venueid) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=23) -> XN Hash (cost=2.02..2.02 rows=202 width=22) -> XN Seq Scan on venue (cost=0.00..2.02 rows=202 width=22) (519 rows)

L'exemple suivant renvoie le plan de requête pour une instruction CREATE TABLE AS (CTAS) :

explain create table venue_nonulls as select * from venue where venueseats is not null; QUERY PLAN ----------------------------------------------------------- XN Seq Scan on venue (cost=0.00..2.02 rows=187 width=45) Filter: (venueseats IS NOT NULL) (2 rows)