Funktionen und Befehle GET_QUERY_OPERATOR_STATS und EXPLAIN: Übergeordnete, durch Arrays repräsentierte Operatoren

Achtung

Diese Verhaltensänderung ist in Bundle 2023_05 enthalten.

Den aktuellen Status des Bundles finden Sie unter Bundle-Verlauf.

Die folgenden Befehle und Funktionen liefern Details zum Ausführen einer Abfrage:

Die Ausgabe dieser Befehle und Funktionen enthält Informationen zu jedem Operatorknoten im Strukturbaum der Operatorknoten, aus denen eine Abfrage besteht.

Hintergrund

Derzeit enthält diese Informationen eine Spalte oder Eigenschaft, mit der ein einzelner übergeordneter Knoten identifiziert wird. Dies gilt nicht für Situationen, in denen ein Operatorknoten mehrere übergeordnete Knoten hat.

Angenommen, Sie erstellen ein Profil der folgenden Abfrage:

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

In dem Profil dieser Abfrage hat der Knoten WithClause [4] mehrere übergeordnete Knoten:

Tree of operator nodes in the query profile

Bei der obigen Abfrage enthält die Ausgabe der Befehle und Funktionen GET_QUERY_OPERATOR_STATS und EXPLAIN eine Spalte oder Eigenschaft, die WithReference [3] als übergeordneten Knoten von WithClause [4] identifiziert. Es gibt jedoch zwei übergeordnete Knoten: WithReference [3] und WithReference [8].

Änderungen an der Ausgabe

Mit dem aktuellen Release wird die vorhandene Spalte oder Eigenschaft für den übergeordneten Knoten durch eine der folgenden Spalten oder Eigenschaften ersetzt, die ein Array mit den IDs der übergeordneten Knoten enthält:

SQL-Befehl oder -Funktion

Vorhandene Spalte oder Eigenschaft

Neue Spalte oder Eigenschaft

EXPLAIN und SYSTEM$EXPLAIN_PLAN_JSON

parent

parentOperators

GET_QUERY_OPERATOR_STATS

PARENT_OPERATOR_ID

PARENT_OPERATORS

Änderungen an der tabellarischen Ausgabe des Befehls EXPLAIN und der Funktion EXPLAIN_JSON

Angenommen, Sie führen die folgende Anweisung aus:

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

Die Ausgabe hat sich wie unten beschrieben geändert:

Bisher

Die Ausgabe umfasst die Spalte „parent“, die die ID eines einzelnen übergeordneten Knotens enthält:

+------+------+--------+---------------+ ...
| 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    | ...
...
Jetzt

Die Ausgabe umfasst die Spalte „parentOperators“, die ein Array der IDs der übergeordneten Knoten enthält:

+------+------+-----------------+---------------+ ...
| 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    | ...
...

Wenn der an die Funktion EXPLAIN_JSON übergebene Abfrageplan keine Informationen zu den übergeordneten Operatoren enthält, hat die Spalte parentOperators den Wert NULL.

Änderungen an der JSON-Ausgabe des EXPLAIN-Befehls und von SYSTEM$EXPLAIN_PLAN_JSON

Angenommen, Sie führen eine Anweisung aus, die die JSON-Ausgabe des Abfrageplans erzeugt. Beispiel:

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

Die Ausgabe hat sich wie unten beschrieben geändert:

Bisher

Die Ausgabe umfasst die Eigenschaft „parent“, die die ID eines einzelnen übergeordneten Knotens enthält:

{
  ...
  "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
Jetzt

Die Ausgabe umfasst die Eigenschaft „parentOperators“, die ein Array der IDs der übergeordneten Knoten enthält:

{
  ...
  "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

Änderungen in der Ausgabe der Funktion GET_QUERY_OPERATOR_STATS

Angenommen, Sie führen die folgenden Anweisungen aus:

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

Die Ausgabe hat sich wie unten beschrieben geändert:

Bisher

Die Ausgabe umfasst die Spalte PARENT_OPERATOR_ID, die die ID eines einzelnen übergeordneten Knotens enthält:

+-----+---------+-------------+--------------------+---------------+ ...
| ... | 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    | ...
...
Jetzt

Die Ausgabe umfasst die Spalte PARENT_OPERATORS, die eine Array der IDs der übergeordneten Knoten enthält:

|-----+---------+-------------+------------------+---------------+ ...
| ... | 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              |               | ...
|     |         |             | ]                |               | ...
...

Ref.: 1175