È possibile eseguire la stored procedure 'EXPLAIN_FORMAT
in Data Virtualization per eseguire il comando 'db2exfmt
. È possibile specificare la formattazione delle informazioni EXPLAIN
generate quando si creano piani di accesso query e si scarica l'output EXPLAIN
generato nei file di testo.
La procedura EXPLAIN_FORMAT
formatta il contenuto delle tabella EXPLAIN
in base ai parametri specificati e aggiorna i dati formattati nella tabella EXPLAIN_STATEMENT sotto la colonna EXPLAIN_FORMAT_TEXT. La procedura restituisce anche un'istruzione SQL come parametro OUTPUT, che può essere utilizzato per recuperare i dati formattati dalla tabella EXPLAIN_STATEMENT. Per ulteriori informazioni sulla tabella EXPLAIN
, consultare la tabella EXPLAIN_STATEMENT nella documentazione di Db2® .
La procedura non emette un'istruzione COMMIT
dopo l'aggiornamento delle tabelle EXPLAIN
. Il chiamante della procedura deve emettere un'istruzione COMMIT
.
Lo schema è SYSPROC
.
Autorizzazioni
- Privilegio EXECUTE sulla routine
- Autorizzazione DATAACCESS
- Autorizzazione DBADM
- Autorizzazione SQLADM
- Privilegio INSERT sulle tabelle explain nello schema specificato
- Privilegio CONTROL sulle tabelle explain nello schema specificato
- Autorizzazione DATAACCESS
- Privilegio PUBLIC predefinito
- ESECUZIONE
Sintassi
---
[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 --'
---
Parametri di procedura
- schema_spiegazione
- Un argomento di input o di output di tipo VARCHAR (128) che specifica lo schema che contiene le tabelle explain in cui devono essere scritte le informazioni EXPLAIN. Se viene specificata una stringa vuota o NULL, viene eseguita una ricerca delle tabelle explain nello schema predefinito dell'ID autorizzazione corrente e quindi dello schema SYSTOOLS. Se le tabelle Explain non vengono trovate nello schema specificato, viene restituito SQL0219N . Se il chiamante non dispone del privilegio INSERT sulle tabelle explain nello schema specificato, viene restituito SQL0551N .
- esplora richiedente
- Un argomento di immissione o emissione di tipo VARCHAR (128) che specifica l'ID di autorizzazione dell'iniziatore di questa richiesta explain. Se viene specificata una stringa vuota o NULL, viene eseguita una ricerca per le tabelle explain nella sessione corrente.
- EXPLAIN_TIME
- Un argomento di input o di output di tipo TIMESTAMP che contiene l'ora di avvio per la richiesta Explain. Se viene specificato NULL, ottenere l'ultima richiesta explain.
- NOME_ORIGINE
- Un argomento di input o di output di tipo VARCHAR (128) che specifica il nome pacchetto (SOURCE_NAME) o il nome oggetto per la richiesta explain. Il pacchetto viene assunto se l'opzione object_type non è specificata.
- schema_origine
- Un argomento di input o di output di tipo VARCHAR (128) che specifica lo schema Package (SOURCE_SCHEMA) della richiesta di package. Se non viene specificato uno schema di package, questa opzione è impostata su '%'. Se il parametro object_module viene fornito per la procedura o la funzione, questa opzione corrisponde allo schema del modulo. Se il tipo di oggetto è una procedura, una funzione o un trigger, questo è lo schema dell'oggetto associato. Se il tipo di oggetto non è una procedura, una funzione o un trigger e il parametro object_module non viene fornito, lo schema viene impostato sul valore del registro speciale CURRENT SCHEMA.
- versione_origine
- Un argomento di input o output di tipo VARCHAR (128) che specifica la versione del pacchetto (SOURCE_VERSION) della richiesta explain. Il valore predefinito è%.
- numero_sezione
- Un argomento di input o di output di tipo INTEGER che contiene il numero di sezione nell'origine. Per richiedere tutte le sezioni, specificare zero.
- tipo_oggetto
- Tipo dell'oggetto specificato. Il tipo predefinito è package.
- moduco_oggetti
- Nome modulo della routine quando l'opzione object_type è P, SP, F o SF. I nomi modulo vengono ignorati se il parametro object_type non è specificato.
- indicatori di formato
- Un argomento di input di tipo VARCHAR (128) che contiene più indicatori che possono essere combinati insieme come stringa. Se viene specificata una stringa vuota o NULL, le opzioni di formattazione vengono determinate automaticamente.
- O: Riepilogo operatore
- Y: Forzatura della formattazione dell'istruzione originale anche se la colonna EXPLAIN_STATEMENT.EXPLAIN_TEXT contiene la formattazione. Il comportamento predefinito è quello di rilevare automaticamente se l'istruzione richiede la formattazione e utilizzare la formattazione originale quando esiste.
- C: Utilizzare una modalità più compatta durante la formattazione di istruzioni e predicati. Il valore predefinito è una modalità espansa. Se Y non viene specificato, C diventa effettivo solo se il rilevamento automatico determina che l'istruzione richiede la formattazione.
- indicatore_grafico
- Un argomento di input di tipo VARCHAR (128) che contiene più indicatori di grafico che possono essere combinati insieme come stringa. Se viene specificata una stringa vuota o NULL, l'opzione predefinita è 'TIC '.
- sql di estrazione
- Un argomento di output di tipo VARCHAR (2048) che contiene l'istruzione SQL che è possibile utilizzare per estrarre i dati formattati rispetto a EXPLAIN_STATEMENT.
Note d'utilizzo
I parametri explain_schema, explain_requester, explain_time, source_schema, source_name, source_version, section_number comprendono la chiave utilizzata per ricercare le informazioni per le sezioni nelle tabelle explain. Se sono stati forniti input NULL, vuoti o con caratteri jolly per questi parametri, il valore effettivo utilizzato verrà aggiornato nel parametro al ritorno.
- Utilizzare i parametri passati per formattare le informazioni EXPLAIN richiamate dalle tabelle explain.
- Aggiornare i dati formattati nella tabella EXPLAIN_STATEMENT sotto la colonna EXPLAIN_FORMAT_TEXT.
- Restituisce i valori effettivi utilizzati per tutti i parametri INOUT (ad esempio explain_schema, explain_requester, explain_time, source_schema, source_name, source_version, section_number).
- Se la procedura ha esito positivo, il parametro OUT EXTRACT_SQL viene popolato con un'istruzione SQL di esempio che può essere utilizzata per richiamare i dati formattati dalla tabella EXPLAIN_STATEMENT. Altrimenti, viene popolato con un messaggio di errore.
Esempio
- Creare le tabelle explain e raccogliere i dati explain per la query o per le query di interesse utilizzando i metodi documentati in https://www.ibm.com/docs/en/db2/11.5?topic=optimization-explain-facility.
- Richiamare la procedura memorizzata
EXPLAIN_FORMAT
, come segue:Call explain_format('DB2INST1', 'DB2INST1', '2022-11-08-02.28.42.810882', 'SQLC2P31', 'NULLID', '', 0, '', '', 'T', ?)
Utilizzare i parametri della tabella seguente:
Tipo Elenco parametri Valore di esempio nell'esempio precedente INOUT Schema_esplicativa DB2INST1 INOUT Richiesto_explain DB2INST1 INOUT EXPLAIN_TIME 2022-11-08-02.28.42.810882 INOUT NOME_ORIGINE SQLC2P31 INOUT Schema_origine NULLID INOUT Versione_origine INOUT Numero_sezione 0 IN tipo_oggetto IN Modulo oggetto IN Indicatori grafici T OUT Estrai SQL ? - Estrarre i dati formattati dalla tabella EXPLAIN_STATEMENT eseguendo la seguente istruzione SQL dal parametro extract_sql OUT:
La query mostra il piano explain formattato simile al seguente esempio: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;
SPIEGA ISTANZA: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 Tool
DB2_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: DB2INST1
Database 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: 3330839
Package 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: 1
Original Statement: ------------------ select * from EXPLAIN_ACTUALS
Optimized 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 Q1
Access Plan: ----------- Total Cost: 9.33976 Query Degree: 1
Rows RETURN ( 1) Cost I/O | 7 TBSCAN ( 2) 9.33976 1 | 7 TABLE: DB2INST1 EXPLAIN_ACTUALS Q1
Extended 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