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:
EXPLAIN, EXPLAIN USING TABULAR und EXPLAIN USING JSON (dies betrifft nicht EXPLAIN USING TEXT)
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;
In dem Profil dieser Abfrage hat der Knoten WithClause [4]
mehrere übergeordnete Knoten:
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 |
|
|
GET_QUERY_OPERATOR_STATS |
|
|
Ä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;
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;
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", ...}, ...
- 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]}, ...
Ä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;
SET lid = LAST_QUERY_ID();
SELECT * FROM TABLE(GET_QUERY_OPERATOR_STATS($lid));
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