EXPLAIN_FORMAT gespeicherte Prozedur in der Data Virtualization
Sie können die gespeicherte Prozedur "
in der Data Virtualization ausführen, um den Befehl " EXPLAIN_FORMAT
auszuführen. Sie können die Formatierung der db2exfmt
-Informationen angeben, die generiert werden, wenn Sie Abfragezugriffspläne erstellen und die generierte EXPLAIN
-Ausgabe in Textdateien herunterladen.EXPLAIN
Das
-Verfahren formatiert den Inhalt der EXPLAIN_FORMAT
-Tabellen auf der Grundlage der angegebenen Parameter und aktualisiert dann die formatierten Daten in der Tabelle EXPLAIN_STATEMENT in der Spalte EXPLAIN_FORMAT_TEXT. Die Prozedur gibt auch eine SQL-Anweisung als Parameter OUTPUT zurück, mit der die formatierten Daten aus der Tabelle EXPLAIN_STATEMENT abgerufen werden können. Weitere Informationen zur Tabelle EXPLAIN
finden Sie unter Tabelle EXPLAIN_STATEMENT in der Db2 -Dokumentation.EXPLAIN
Die Prozedur gibt keine Anweisung
aus, nachdem die COMMIT
-Tabellen aktualisiert wurden. Der Aufrufende der Prozedur muss eine Anweisung EXPLAIN
absetzen.COMMIT
Schema:
.SYSPROC
Berechtigungen
- Zugriffsrecht EXECUTE für die Routine
- Berechtigung DATAACCESS
- DBADM-Berechtigung
- Berechtigung SQLADM
- Zugriffsrecht INSERT für die EXPLAIN-Tabellen im angegebenen Schema
- Zugriffsrecht CONTROL für die EXPLAIN-Tabellen im angegebenen Schema
- Berechtigung DATAACCESS
- Standardzugriffsrechte für PUBLIC
- AUSFÜHREN
Syntax
--- [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 --' ---
Prozedurparameter
- explain_schema
- Ein Eingabe-oder Ausgabeargument des Typs VARCHAR (128), das das Schema angibt, das die EXPLAIN-Tabellen enthält, in die die EXPLAIN-Informationen geschrieben werden sollen. Wenn eine leere Zeichenfolge oder NULL angegeben wird, wird eine Suche nach den EXPLAIN-Tabellen unter dem Standardschema der aktuellen Berechtigungs-ID und dann dem Schema SYSTOOLS durchgeführt. Wenn die EXPLAIN-Tabellen nicht unter dem angegebenen Schema gefunden werden können, wird SQL0219N zurückgegeben. Wenn der Aufrufende kein Zugriffsrecht INSERT für die EXPLAIN-Tabellen im angegebenen Schema hat, wird SQL0551N zurückgegeben.
- EXPLAIN_REQUESTER
- Ein Eingabe-oder Ausgabeargument des Typs VARCHAR (128), das die Berechtigungs-ID des Initiators dieser EXPLAIN-Anforderung angibt. Wenn eine leere Zeichenfolge oder NULL angegeben wird, wird in der aktuellen Sitzung nach den EXPLAIN-Tabellen gesucht.
- EXPLAIN_TIME
- Ein Eingabe-oder Ausgabeargument des Typs TIMESTAMP, das die Initialisierungszeit für die EXPLAIN-Anforderung enthält. Wenn NULL angegeben wird, erhalten Sie die letzte EXPLAIN-Anforderung.
- SOURCE_NAME
- Ein Eingabe-oder Ausgabeargument des Typs VARCHAR (128), das den Paketnamen (SOURCE_NAME) oder den Objektnamen für die EXPLAIN-Anforderung angibt. Paket wird angenommen, wenn die Option object_type nicht angegeben ist.
- SOURCE_SCHEMA
- Ein Eingabe-oder Ausgabeargument des Typs VARCHAR (128), das das Paketschema (SOURCE_SCHEMA) der Paketanforderung angibt. Wenn kein Paketschema angegeben ist, wird diese Option auf '%' gesetzt. Wenn der Parameter object_module für die Prozedur oder Funktion angegeben wird, entspricht diese Option dem Modulschema. Wenn es sich bei dem Objekttyp um eine Prozedur, eine Funktion oder einen Auslöser handelt, ist diese Option das Schema des zugehörigen Objekts. Wenn der Objekttyp keine Prozedur, Funktion oder Auslöser ist und der Parameter object_module nicht angegeben wird, wird das Schema auf den Wert des Sonderregisters CURRENT SCHEMA gesetzt.
- SOURCE_VERSION
- Ein Eingabe-oder Ausgabeargument des Typs VARCHAR (128), das die Paketversion (SOURCE_VERSION) der EXPLAIN-Anforderung angibt. Der Standardwert ist%.
- section_number
- Ein Eingabe-oder Ausgabeargument des Typs INTEGER, das die Abschnittsnummer in der Quelle enthält. Um alle Abschnitte anzufordern, geben Sie null an.
- Objekttyp
- Typ des angegebenen Objekts. Der Standardtyp ist package.
- object_module
- Modulname der Routine, wenn die Option object_type auf P, SP, F oder SF gesetzt ist. Modulnamen werden ignoriert, wenn der Parameter object_type nicht angegeben wird.
- Formatmarkierungen
- Ein Eingabeargument des Typs VARCHAR (128), das mehrere Flags enthält, die als Zeichenfolge kombiniert werden können. Wenn eine leere Zeichenfolge oder NULL angegeben wird, werden die Formatierungsoptionen automatisch bestimmt.
- O: Operatorzusammenfassung
- Y: Formatierung der ursprünglichen Anweisung erzwingen, auch wenn die Spalte EXPLAIN_STATEMENT.EXPLAIN_TEXT enthält Formatierung. Das Standardverhalten besteht darin, automatisch zu erkennen, ob die Anweisung Formatierung erfordert, und die ursprüngliche Formatierung zu verwenden, wenn sie vorhanden ist.
- C: Verwenden Sie bei der Formatierung von Anweisungen und Vergleichselementen einen kompakteren Modus. Standardmäßig wird ein erweiterter Modus verwendet. Wird Y nicht angegeben, wird C nur wirksam, wenn die automatische Erkennung feststellt, dass die Anweisung formatiert werden muss.
- Grafikmarkierungen
- Ein Eingabeargument des Typs VARCHAR (128), das mehrere Graph-Flags enthält, die als Zeichenfolge kombiniert werden können. Wenn eine leere Zeichenfolge oder NULL angegeben wird, ist 'TIC' die Standardoption.
- extrahiert_sql
- Ein Ausgabeargument vom Typ VARCHAR(2048), das die SQL-Anweisung enthält, die zum Extrahieren der formatierten Daten für EXPLAIN_STATEMENT verwendet werden kann.
Hinweise zur Verwendung
Die Parameter explain_schema, explain_requester, explain_time, source_schema, source_name, source_version und section_number bilden den Schlüssel, der verwendet wird, um die Informationen für den Abschnitt in den Explain-Tabellen nachzuschlagen. Wenn NULL oder leer oder wenn Platzhalter für diese Parameter verwendet werden, wird der tatsächlich verwendete Wert bei der Rückgabe im Parameter aktualisiert.
- Verwenden Sie übergebene Parameter, um die EXPLAIN-Informationen zu formatieren, die aus den Explain-Tabellen abgerufen werden.
- Aktualisieren Sie die formatierten Daten in der Tabelle EXPLAIN_STATEMENT unter der Spalte EXPLAIN_FORMAT_TEXT.
- Gibt die tatsächlichen Werte zurück, die für alle INOUT-Parameter verwendet werden (explain_schema, explain_requester, explain_time, source_schema, source_name, source_version, section_number).
- Wenn die Prozedur erfolgreich ist, wird der OUT-Parameter EXTRACT_SQL mit einer SQL-Beispielanweisung gefüllt, die zum Abrufen formatierter Daten aus der Tabelle EXPLAIN_STATEMENT verwendet werden kann. Andernfalls wird eine Fehlernachricht angezeigt.
Beispiel
- Erstellen Sie die EXPLAIN-Tabellen und erfassen Sie die EXPLAIN-Daten für die Abfrage(n) von Interesse mithilfe der Methoden, die in Db2 Erklären Sie die Einrichtung.
- Rufen Sie die gespeicherte Prozedur
wie folgt auf:EXPLAIN_FORMAT
Call explain_format('DB2INST1', 'DB2INST1', '2022-11-08-02.28.42.810882', 'SQLC2P31', 'NULLID', '', 0, '', '', 'T', ?)
Verwenden Sie die Parameter aus der folgenden Tabelle:
Typ Parameterliste Beispielwert im obigen Beispiel INOUT Explain_Schema DB2INST1 INOUT EXPLAIN_REQUESTER DB2INST1 INOUT EXPLAIN_TIME 2022-11-08-02.28.42.810882 INOUT SOURCE_NAME SQLC2P31 INOUT SOURCE_SCHEMA NULLID INOUT SOURCE_VERSION INOUT section_number 0 IN OBJECT_TYPE IN object_module IN Grafik-Flags T OUT Extrahiert_SQL ? - Extrahieren Sie die formatierten Daten aus der Tabelle EXPLAIN_STATEMENT, indem Sie die folgenden SQL-Anweisungen über den Parameter extract_sql OUT ausführen:
Die Abfrage zeigt den formatierten EXPLAIN-Plan ähnlich dem folgenden Beispiel: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;
EXPLAIN-INSTANZ: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