Procedimento armazenado EXPLAIN_FORMAT na Data Virtualization
Você pode executar o procedimento armazenado " EXPLAIN_FORMAT na Data Virtualization para executar o comando " db2exfmt. É possível especificar a formatação das informações do EXPLAIN que são geradas ao construir planos de acesso de consulta e fazer download da saída EXPLAIN gerada em arquivos de texto.
O procedimento EXPLAIN_FORMAT formata o conteúdo das tabelas EXPLAIN com base nos parâmetros especificados e, em seguida, atualiza os dados formatados na tabela EXPLAIN_STATEMENT na coluna EXPLAIN_FORMAT_TEXT. O procedimento também retorna uma instrução SQL como o parâmetro OUTPUT, que pode ser usado para buscar os dados formatados da tabela EXPLAIN_STATEMENT. Para obter mais informações sobre a tabela EXPLAIN , consulte Tabela EXPLAIN_STATEMENT na documentação Db2 .
O procedimento não emite uma instrução COMMIT após a atualização das tabelas EXPLAIN O responsável pela chamada do procedimento deve emitir uma instrução COMMIT ..
O esquema é SYSPROC
Autorizações
- Privilégio EXECUTE na rotina
- Autoridade DATAACCESS
- autoridade DBADM
- Autoridade SQLADM
- Privilégio INSERT nas tabelas EXPLAIN no esquema especificado
- Privilégio CONTROL nas tabelas EXPLAIN no esquema especificado
- Autoridade DATAACCESS
- Privilégio PUBLIC padrão
- EXECUTE
Sintaxe
---
[source,c++]
>>--EXPLAIN_FORMAT----(-- explain_schema-- , --explain_requester--, --explain_time-- , --------------->
>-- ------------ source_name------- , ---------source_schema-------- , --------source_version-- , --->
>-- ------------ object_type------- , ----------------------------object_module----------------------->
v--------|
>-- --section_number-- , ----format_flags------+-----+------- , ---graph_flags-----+---+-------+--------+-----<>
'--O--' '-x-' '--- O --'
'--Y--' '--- I --'
'--C--' '--- C --'
'--- T --'
'--- F --'
---
Parâmetros de procedimento
- explicar_esquema
- Um argumento de entrada ou saída do tipo VARCHAR (128) que especifica o esquema que contém as tabelas de explicação em que as informações EXPLAIN devem ser gravadas. Se uma sequência vazia ou NULL for especificado, uma procura será feita para as tabelas de explicações sob o esquema padrão do ID de autorização atual e, em seguida, o esquema SYSTOOLS. Se as tabelas Explain não puderem ser localizadas no esquema especificado, SQL0219N será retornado. Se o responsável pela chamada não tiver privilégio INSERT nas tabelas de explicação no esquema especificado, SQL0551N será retornado.
- explicar_solicitante
- Um argumento de entrada ou saída do tipo VARCHAR (128) que especifica o ID de autorização do inicializador deste pedido de explicação. Se uma sequência vazia ou NULL for especificado, uma procura será feita para as tabelas de explicação sob a sessão atual
- EXPLAIN_TIME
- Um argumento de entrada ou de saída do tipo TIMESTAMP que contém o horário de iniciação para a solicitação do Explain Se NULL for especificado, obtenha a solicitação de explicação mais recente.
- SOURCE_NAME
- Um argumento de entrada ou de saída do tipo VARCHAR (128) que especifica o nome do Pacote (SOURCE_NAME) ou o nome do objeto para a solicitação de explicação O pacote será assumido se a opção object_type não for especificada
- SOURCE_SCHEMA
- Um argumento de entrada ou de saída do tipo VARCHAR (128) que especifica o esquema do Pacote (SOURCE_SCHEMA) da solicitação do pacote... Se um esquema de pacote não for especificado, essa opção será configurada como '%' Se o parâmetro object_module for fornecido para o procedimento ou função, essa opção corresponderá ao esquema do módulo. Se o tipo de objeto for um procedimento, função ou acionador, essa opção será o esquema do objeto associado. Se o tipo de objeto não for um procedimento, função ou acionador e o parâmetro object_module não for fornecido, o esquema será configurado para o valor do registro especial CURRENT SCHEMA.
- versão_fonte
- Um argumento de entrada ou saída do tipo VARCHAR (128) que especifica a versão do Pacote (SOURCE_VERSION) da solicitação de explicação. O valor padrão é%.
- section_number
- Um argumento de entrada ou saída do tipo INTEGER que contém o número da seção na origem. Para solicitar todas as seções, especifique zero.
- object_type
- Tipo do objeto especificado. O tipo padrão é pacote.
- módulo_objeto
- Nome do módulo da rotina quando a opção object_type é P, SP, F ou SF. Os nomes do módulo serão ignorados se o parâmetro object_type não for especificado
- sinalizadores_de_formato
- Um argumento de entrada do tipo VARCHAR (128) que contém vários sinalizadores que podem ser combinados juntos como uma cadeia. Se uma sequência vazia ou NULL for especificado, as opções de formatação serão determinadas automaticamente.
- O: Resumo do operador
- Y: Forçar a formatação da instrução original mesmo se a coluna EXPLAIN_STATEMENT.EXPLAIN_TEXT contém formatação. O comportamento padrão é detectar automaticamente se a instrução requer formatação e usar a formatação original quando existir.
- C: Use um modo mais compacto ao formatar instruções e predicados.. O padrão é um modo expandido. Se Y não for especificado, então C entrará em vigor apenas se a detecção automática determinar que a instrução requer formatação
- sinalizadores_gráfico
- Um argumento de entrada do tipo VARCHAR (128) que contém vários sinalizadores de gráfico que podem ser combinados juntos como uma cadeia. Se uma cadeia vazia ou NULL for especificada, então 'TIC' será a opção padrão..
- extract_sql
- Um argumento de saída do tipo VARCHAR(2048) que contém a instrução SQL, que pode ser usada para extrair os dados formatados em relação a EXPLAIN_STATEMENT.
Observações de uso
Os parâmetros explain_schema, explain_requester, explain_time, source_schema, source_name, source_version, section_number compõem a chave que é usada para procurar as informações da seção nas tabelas de explicação. Se NULL ou vazio, ou se forem usadas entradas curinga para esses parâmetros, o valor real usado será atualizado no parâmetro no retorno.
- Use os parâmetros passados para formatar as informações do EXPLAIN que são recuperadas das tabelas de explicação.
- Atualize os dados formatados na tabela EXPLAIN_STATEMENT sob a coluna EXPLAIN_FORMAT_TEXT
- Retorna os valores reais que são usados para todos os parâmetros INOUT (explain_schema, explain_requester, explain_time, source_schema, source_name, source_version, section_number).
- Se o procedimento for bem-sucedido, o parâmetro OUT EXTRACT_SQL será preenchido com uma instrução SQL de exemplo que pode ser usada para recuperar dados formatados da tabela EXPLAIN_STATEMENT. Caso contrário, será preenchido com uma mensagem de erro.
Exemplo
- Crie as tabelas explicativas e reúna os dados explicativos para a consulta ou consultas de interesse usando os métodos documentados em Db2 Explique a facilidade.
- Chame o procedimento armazenado
EXPLAIN_FORMAT, conforme a seguir:Call explain_format('DB2INST1', 'DB2INST1', '2022-11-08-02.28.42.810882', 'SQLC2P31', 'NULLID', '', 0, '', '', 'T', ?)Use os parâmetros da tabela a seguir:
Tipo Lista de parâmetros Exemplo de valor de amostra acima INOUT Explicar_Esquema DB2INST1 INOUT Explique_Solicitante DB2INST1 INOUT EXPLAIN_TIME 2022-11-08-02.28.42.810882 INOUT SOURCE_NAME SQLC2P31 INOUT SOURCE_SCHEMA NULLID INOUT Versão_Fonte INOUT section_number 0 DENTRO OBJECT_TYPE DENTRO Módulo de Objeto DENTRO Sinalizadores do gráfico T OUT Extrato_SQL ? - Extraia os dados formatados da tabela EXPLAIN_STATEMENT executando a seguinte instrução SQL a partir do parâmetro extract_sql OUT:
A consulta mostra o plano de explicação formatado semelhante ao seguinte exemplo:select EXPLAIN_FORMAT_TEXT from "DB2INST1".EXPLAIN_STATEMENT where EXPLAIN_REQUESTER='DB2INST1' and EXPLAIN_TIME='2022-11-08-02.28.42.810882' and SOURCE_NAME='SQLC2P31' and SOURCE_SCHEMA='NULLID' and SOURCE_VERSION='' and SECTION_NUMBER=0 and EXPLAIN_LEVEL='O' FOR READ ONLY;
EXPLICAR INSTÂNCIA:DB2 Universal Database Version 11.5, 5622-044 (c) Copyright IBM Corp. 1991, 2019 Licensed Material - Program Property of IBM IBM DATABASE 2 Explain Table Format ToolDB2_VERSION: 11.05.9 FORMATTED ON DB: SAURABH SOURCE_NAME: SQLC2P31 SOURCE_SCHEMA: NULLID SOURCE_VERSION: EXPLAIN_TIME: 2022-11-08-02.28.42.810882 EXPLAIN_REQUESTER: DB2INST1Database Context: ---------------- Parallelism: None CPU Speed: 4.000000e-05 Comm Speed: 0 Buffer Pool size: 697394 Sort Heap size: 3090 Database Heap size: 5099 Lock List size: 106213 Maximum Lock List: 98 Average Applications: 1 Locks Available: 3330839Package Context: --------------- SQL Type: Dynamic Optimization Level: 5 Blocking: Block All Cursors Isolation Level: Cursor Stability---------------- STATEMENT 1 SECTION 201 ---------------- QUERYNO: 1 QUERYTAG: CLP Statement Type: Select Updatable: No Deletable: No Query Degree: 1Original Statement: ------------------ select * from EXPLAIN_ACTUALSOptimized Statement: ------------------- SELECT Q1.EXPLAIN_REQUESTER AS "EXPLAIN_REQUESTER", Q1.EXPLAIN_TIME AS "EXPLAIN_TIME", Q1.SOURCE_NAME AS "SOURCE_NAME", Q1.SOURCE_SCHEMA AS "SOURCE_SCHEMA", Q1.SOURCE_VERSION AS "SOURCE_VERSION", Q1.EXPLAIN_LEVEL AS "EXPLAIN_LEVEL", Q1.STMTNO AS "STMTNO", Q1.SECTNO AS "SECTNO", Q1.OPERATOR_ID AS "OPERATOR_ID", Q1.DBPARTITIONNUM AS "DBPARTITIONNUM", Q1.PREDICATE_ID AS "PREDICATE_ID", Q1.HOW_APPLIED AS "HOW_APPLIED", Q1.ACTUAL_TYPE AS "ACTUAL_TYPE", Q1.ACTUAL_VALUE AS "ACTUAL_VALUE" FROM DB2INST1.EXPLAIN_ACTUALS AS Q1Access Plan: ----------- Total Cost: 9.33976 Query Degree: 1Rows RETURN ( 1) Cost I/O | 7 TBSCAN ( 2) 9.33976 1 | 7 TABLE: DB2INST1 EXPLAIN_ACTUALS Q1Extended Diagnostic Information: -------------------------------- Diagnostic Identifier: 1 Diagnostic Details: EXP0020W Statistics have not been collected for table "DB2INST1"."EXPLAIN_ACTUALS". This may result in a sub-optimal access plan and poor performance. Statistics should be collected for this table.Plan Details: ------------- 1) RETURN: (Return Result) Cumulative Total Cost: 9.33976 Cumulative CPU Cost: 64369 Cumulative I/O Cost: 1 Cumulative Re-Total Cost: 0.55104 Cumulative Re-CPU Cost: 13776 Cumulative Re-I/O Cost: 0 Cumulative First Row Cost: 8.8576 Estimated Bufferpool Buffers: 1 Arguments: --------- BLDLEVEL: (Build level) DB2 v11.5.9.0 : z2201010100 CPUCACHE: (Per-thread CPU cache size) 16777216 HEAPUSE : (Maximum Statement Heap Usage) 96 Pages PLANID : (Access plan identifier) 4e88ef7dccf8bbe7 PREPTIME: (Statement prepare time) 37 milliseconds SEMEVID : (Semantic environment identifier) e58edaa6cc913871 STMTHEAP: (Statement heap size) 8192 STMTID : (Normalized statement identifier) 226ceef303eb75ac TENANTID: (Compiled In Tenant ID) 0 TENANTNM: (Compiled In Tenant Name) SYSTEM Input Streams: ------------- 2) From Operator #2 Estimated number of rows: 7 Number of columns: 14 Subquery predicate ID: Not Applicable Column Names: ------------ +Q2.ACTUAL_VALUE+Q2.ACTUAL_TYPE+Q2.HOW_APPLIED +Q2.PREDICATE_ID+Q2.DBPARTITIONNUM +Q2.OPERATOR_ID+Q2.SECTNO+Q2.STMTNO +Q2.EXPLAIN_LEVEL+Q2.SOURCE_VERSION +Q2.SOURCE_SCHEMA+Q2.SOURCE_NAME +Q2.EXPLAIN_TIME+Q2.EXPLAIN_REQUESTER 2) TBSCAN: (Table Scan) Cumulative Total Cost: 9.33976 Cumulative CPU Cost: 64369 Cumulative I/O Cost: 1 Cumulative Re-Total Cost: 0.55104 Cumulative Re-CPU Cost: 13776 Cumulative Re-I/O Cost: 0 Cumulative First Row Cost: 8.8576 Estimated Bufferpool Buffers: 1 Arguments: --------- CUR_COMM: (Currently Committed) TRUE LCKAVOID: (Lock Avoidance) TRUE MAXPAGES: (Maximum pages for prefetch) ALL PREFETCH: (Type of Prefetch) NONE ROWLOCK : (Row Lock intent) SHARE (CS/RS) SCANDIR : (Scan Direction) FORWARD SKIP_INS: (Skip Inserted Rows) TRUE SPEED : (Assumed speed of scan, in sharing structures) FAST TABLOCK : (Table Lock intent) INTENT SHARE TBISOLVL: (Table access Isolation Level) CURSOR STABILITY THROTTLE: (Scan may be throttled, for scan sharing) TRUE VISIBLE : (May be included in scan sharing structures) TRUE WRAPPING: (Scan may start anywhere and wrap) TRUE Input Streams: ------------- 1) From Object DB2INST1.EXPLAIN_ACTUALS Estimated number of rows: 7 Number of columns: 15 Subquery predicate ID: Not Applicable Column Names: ------------ +Q1.$RID$+Q1.ACTUAL_VALUE+Q1.ACTUAL_TYPE +Q1.HOW_APPLIED+Q1.PREDICATE_ID +Q1.DBPARTITIONNUM+Q1.OPERATOR_ID+Q1.SECTNO +Q1.STMTNO+Q1.EXPLAIN_LEVEL+Q1.SOURCE_VERSION +Q1.SOURCE_SCHEMA+Q1.SOURCE_NAME +Q1.EXPLAIN_TIME+Q1.EXPLAIN_REQUESTER Output Streams: -------------- 2) To Operator #1 Estimated number of rows: 7 Number of columns: 14 Subquery predicate ID: Not Applicable Column Names: ------------ +Q2.ACTUAL_VALUE+Q2.ACTUAL_TYPE+Q2.HOW_APPLIED +Q2.PREDICATE_ID+Q2.DBPARTITIONNUM +Q2.OPERATOR_ID+Q2.SECTNO+Q2.STMTNO +Q2.EXPLAIN_LEVEL+Q2.SOURCE_VERSION +Q2.SOURCE_SCHEMA+Q2.SOURCE_NAME +Q2.EXPLAIN_TIME+Q2.EXPLAIN_REQUESTER Objects Used in Access Plan: --------------------------- Schema: DB2INST1 Name: EXPLAIN_ACTUALS Type: Table Time of creation: 2022-11-08-02.27.27.843587 Last statistics update: Number of columns: 14 Number of rows: 7 Width of rows: 392 Number of buffer pool pages: 1 Number of data partitions: 1 Distinct row values: No Tablespace name: USERSPACE1 Tablespace overhead: 6.725000 Tablespace transfer rate: 0.040000 Source for statistics: Single Node Prefetch page count: 32 Container extent page count: 32 Table overflow record count: 0 Table Active Blocks: -1 Average Row Compression Ratio: -1 Percentage Rows Compressed: -1 Average Compressed Row Size: -1