Funções e comandos GET_QUERY_OPERATOR_STATS e EXPLAIN: operadores pais representados por matrizes¶
Atenção
Essa mudança de comportamento está no pacote 2023_05.
Para saber o status atual do pacote, consulte Histórico do pacote.
Os comandos e funções a seguir fornecem detalhes sobre a execução de uma consulta:
EXPLAIN, EXPLAIN USING TABULAR e EXPLAIN USING JSON (isso não afeta EXPLAIN USING TEXT)
A saída desses comandos e funções inclui informações sobre cada nó do operador na árvore de nós do operador que compõem uma consulta.
Visão geral¶
Atualmente, essas informações incluem uma coluna ou propriedade que identifica um único nó pai. Isso não trata situações em que um nó do operador possui vários nós pai.
Por exemplo, suponha que você esteja produzindo um perfil da seguinte consulta:
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;
No perfil desta consulta, o nó WithClause [4]
possui vários nós pais:
Para a consulta acima, a saída dos comandos e funções GET_QUERY_OPERATOR_STATS e EXPLAIN possui uma coluna ou propriedade que identifica WithReference [3]
como o nó pai de WithClause [4]
. No entanto, existem dois nós pais: WithReference [3]
e WithReference [8]
.
Mudanças na saída¶
Na versão atual, a coluna ou propriedade existente do nó pai é substituída por uma das seguintes colunas ou propriedades que contém uma matriz de IDs dos nós pai:
Comando ou função SQL |
Coluna ou propriedade existente |
Nova coluna ou propriedade |
---|---|---|
EXPLAIN e SYSTEM$EXPLAIN_PLAN_JSON |
|
|
GET_QUERY_OPERATOR_STATS |
|
|
Mudanças na saída tabular do comando EXPLAIN e da função EXPLAIN_JSON¶
Suponha que você execute a seguinte instrução:
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;
A saída mudou conforme descrito abaixo:
- Anteriormente:
A saída inclui a coluna pai, que contém uma única ID do nó pai:
+------+------+--------+---------------+ ... | 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 | ... ...
- Atualmente:
A saída inclui a coluna parentOperators, que contém uma matriz de IDs de nó pai:
+------+------+-----------------+---------------+ ... | 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 | ... ...
Para a função EXPLAIN_JSON, se o plano passado para a função não incluir informações sobre os operadores pai, a coluna parentOperators
será NULL.
Mudanças na saída JSON do comando EXPLAIN e SYSTEM$EXPLAIN_PLAN_JSON¶
Suponha que você execute uma instrução que produza a saída JSON do plano de consulta. Por exemplo:
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;
A saída mudou conforme descrito abaixo:
- Anteriormente:
A saída inclui a propriedade pai, que contém uma única ID do nó pai:
{ ... "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", ...}, ...
- Atualmente:
A saída inclui a propriedade parentOperators, que contém uma matriz de IDs de nó pai:
{ ... "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]}, ...
Mudanças na saída da função GET_QUERY_OPERATOR_STATS¶
Suponha que você execute as seguintes instruções:
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));
A saída mudou conforme descrito abaixo:
- Anteriormente:
A saída inclui a coluna PARENT_OPERATOR_ID, que contém uma única ID do nó pai:
+-----+---------+-------------+--------------------+---------------+ ... | ... | 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 | ... ...
- Atualmente:
A saída inclui a coluna PARENT_OPERATORS, que contém uma matriz de IDs de nó pai:
|-----+---------+-------------+------------------+---------------+ ... | ... | 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