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 :

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;
Copy

Dans le profil de cette requête, le nœud WithClause [4] a plusieurs nœuds parents :

Arbre des nœuds de l'opérateur dans le profil de la requête

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

parent

parentOperators

GET_QUERY_OPERATOR_STATS

PARENT_OPERATOR_ID

PARENT_OPERATORS

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;
Copy

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;
Copy

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", ...},
    ...
Copy
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]},
    ...
Copy

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;
Copy
SET lid = LAST_QUERY_ID();
Copy
SELECT * FROM TABLE(GET_QUERY_OPERATOR_STATS($lid));
Copy

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