Fonctions et commandes GET_QUERY_OPERATOR_STATS et EXPLAIN : opérateurs parents représentés par des tableaux¶
Attention
Ce changement de comportement est présent dans le bundle 2023_05.
Pour connaître le statut actuel du bundle, reportez-vous à Historique du bundle.
Les commandes et fonctions suivantes fournissent des détails sur l’exécution d’une requête :
EXPLAIN, EXPLAIN USING TABULAR, and EXPLAIN USING JSON (ceci n’affecte pas EXPLAIN USING TEXT)
La sortie de ces commandes et fonctions comprend des informations sur chaque nœud d’opérateur dans l’arbre des nœuds d’opérateurs qui composent une requête.
Contexte général¶
Actuellement, ces informations comprennent une colonne ou une propriété qui identifie un seul nœud parent. Cela ne permet pas de gérer les situations dans lesquelles un nœud d’opérateur a plusieurs nœuds parents.
Par exemple, supposons que vous produisiez un profil de la requête suivante :
WITH wv AS (
SELECT a FROM t WHERE a % 2 = 1
)
SELECT a FROM wv WHERE a % 3 = 1
UNION ALL
SELECT a FROM wv WHERE a % 5 = 1;
Dans le profil de cette requête, le nœud WithClause [4]
a plusieurs nœuds parents :
Pour la requête ci-dessus, la sortie des commandes et fonctions GET_QUERY_OPERATOR_STATS et EXPLAIN comporte une colonne ou une propriété qui identifie WithReference [3]
comme le nœud parent de WithClause [4]
. Cependant, il existe deux nœuds parents : WithReference [3]
et WithReference [8]
.
Modification dans la sortie¶
Dans la version actuelle, la colonne ou propriété existante pour le nœud parent est remplacée par l’une des colonnes ou propriétés suivantes qui contient un tableau des IDs des nœuds parents :
Commande ou fonctionSQL |
Colonne ou propriété existante |
Nouvelle colonne ou propriété |
---|---|---|
EXPLAIN et SYSTEM$EXPLAIN_PLAN_JSON |
|
|
GET_QUERY_OPERATOR_STATS |
|
|
Changements dans la sortie tabulaire de la commande EXPLAIN et de la fonction EXPLAIN_JSON¶
Supposons que vous exécutiez l’instruction suivante :
EXPLAIN WITH wv AS (
SELECT a FROM t WHERE a % 2 = 1
)
SELECT a FROM wv WHERE a % 3 = 1
UNION ALL
SELECT a FROM wv WHERE a % 5 = 1;
La sortie a été modifiée comme indiqué ci-dessous :
- Précédemment:
La sortie comprend la colonne parent, qui contient un seul ID de nœud parent :
+------+------+--------+---------------+ ... | step | id | parent | operation | ... +------+------+--------+---------------+ ... | NULL | NULL | NULL | GlobalStats | ... | 1 | 0 | NULL | Result | ... | 1 | 1 | 0 | UnionAll | ... | 1 | 2 | 1 | Filter | ... | 1 | 3 | 2 | WithReference | ... | 1 | 4 | 3 | WithClause | ... ...
- Actuellement:
La sortie comprend la colonne parentOperators, qui contient un tableau d’IDs de nœuds parents :
+------+------+-----------------+---------------+ ... | step | id | parentOperators | operation | ... |------+------+-----------------+---------------+ ... | NULL | NULL | NULL | GlobalStats | ... | 1 | 0 | NULL | Result | ... | 1 | 1 | [0] | UnionAll | ... | 1 | 2 | [1] | Filter | ... | 1 | 3 | [2] | WithReference | ... | 1 | 4 | [3, 8] | WithClause | ... ...
Pour la fonction EXPLAIN_JSON, si le plan transmis à la fonction ne contient pas d’informations sur les opérateurs parents, la colonne parentOperators
sera NULL.
Changements dans la sortie JSON de la commande EXPLAIN et de SYSTEM$EXPLAIN_PLAN_JSON¶
Supposons que vous exécutiez une instruction qui produit la sortie JSON du plan de requête. Par exemple :
EXPLAIN USING JSON WITH wv AS (
SELECT a FROM t WHERE a % 2 = 1
)
SELECT a FROM wv WHERE a % 3 = 1
UNION ALL
SELECT a FROM wv WHERE a % 5 = 1;
La sortie a été modifiée comme indiqué ci-dessous :
- Précédemment:
La sortie comprend la propriété parent, qui contient un seul ID de nœud parent :
{ ... "Operations": [[ ... {"id":1,"parent":0,"operation":"UnionAll"}, {"id":2,"parent":1,"operation":"Filter", ...}, {"id":3,"parent":2,"operation":"WithReference"}, {"id":4,"parent":3,"operation":"WithClause", ...}, ...
- Actuellement:
La sortie comprend la propriété parentOperators, qui contient un tableau d’IDs de nœuds parents :
{ ... "Operations":[[ ... {"id":1,"operation":"UnionAll","parentOperators":[0]}, {"id":2,"operation":"Filter",... , "parentOperators":[1]}, {"id":3,"operation":"WithReference","parentOperators":[2]}, {"id":4,"operation":"WithClause",... ,"parentOperators":[3,8]}, ...
Changements dans la sortie de la fonction GET_QUERY_OPERATOR_STATS¶
Supposons que vous exécutiez les instructions suivantes :
WITH wv AS (
SELECT a FROM t WHERE a % 2 = 1
)
SELECT a FROM wv WHERE a % 3 = 1
UNION ALL
SELECT a FROM wv WHERE a % 5 = 1;
SET lid = LAST_QUERY_ID();
SELECT * FROM TABLE(GET_QUERY_OPERATOR_STATS($lid));
La sortie a été modifiée comme indiqué ci-dessous :
- Précédemment:
La sortie comprend la colonne PARENT_OPERATOR_ID, qui contient un seul ID de nœud parent :
+-----+---------+-------------+--------------------+---------------+ ... | ... | STEP_ID | OPERATOR_ID | PARENT_OPERATOR_ID | OPERATOR_TYPE | ... +-----+---------+-------------+--------------------+---------------+ ... | ... | 1 | 0 | NULL | Result | ... | ... | 1 | 1 | 0 | UnionAll | ... | ... | 1 | 2 | 1 | Filter | ... | ... | 1 | 3 | 2 | WithReference | ... | ... | 1 | 4 | 3 | WithClause | ... ...
- Actuellement:
La sortie comprend la colonne PARENT_OPERATORS, qui contient un tableau d’IDs de nœuds parents :
|-----+---------+-------------+------------------+---------------+ ... | ... | STEP_ID | OPERATOR_ID | PARENT_OPERATORS | OPERATOR_TYPE | ... |-----+---------+-------------+------------------+---------------+ ... | ... | 1 | 0 | NULL | Result | ... | ... | 1 | 1 | [ | UnionAll | ... | | | | 0 | | ... | | | | ] | | ... | ... | 1 | 2 | [ | Filter | ... | | | | 1 | | ... | | | | ] | | ... | ... | 1 | 3 | [ | WithReference | ... | | | | 2 | | ... | | | | ] | | ... | ... | 1 | 4 | [ | WithClause | ... | | | | 3, | | ... | | | | 8 | | ... | | | | ] | | ... ...
Réf : 1175