EXPLAIN_FORMAT gespeicherte Prozedur in der Data Virtualization

Letzte Aktualisierung: 21. März 2025
EXPLAIN_FORMAT gespeicherte Prozedur in der Data Virtualization

Sie können die gespeicherte Prozedur " EXPLAIN_FORMAT in der Data Virtualization ausführen, um den Befehl " db2exfmt auszuführen. Sie können die Formatierung der EXPLAIN -Informationen angeben, die generiert werden, wenn Sie Abfragezugriffspläne erstellen und die generierte EXPLAIN -Ausgabe in Textdateien herunterladen.

Das EXPLAIN_FORMAT -Verfahren formatiert den Inhalt der EXPLAIN -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.

Die Prozedur gibt keine Anweisung COMMIT aus, nachdem die EXPLAIN -Tabellen aktualisiert wurden. Der Aufrufende der Prozedur muss eine Anweisung COMMIT absetzen.

Schema: SYSPROC.

Berechtigungen

Zum Ausführen der Routine ist eine der folgenden Berechtigungen oder Zugriffsrechte erforderlich:
  • Zugriffsrecht EXECUTE für die Routine
  • Berechtigung DATAACCESS
  • DBADM-Berechtigung
  • Berechtigung SQLADM
Außerdem müssen die Berechtigungen, die von der Berechtigungs-ID der Sitzung gehalten werden, einschließlich der Berechtigungen, die Gruppen erteilt werden, mindestens eine der folgenden Optionen enthalten:
  • 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.
  • PK: Paketname
  • P: Name der SQL-Prozedur
  • SP: Ein bestimmter SQL-Prozedurname
  • F: Kompilierte Funktion
  • SF: Ein bestimmter kompilierter Funktionsname
  • T: Kompilierte Auslöser
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.
  • Inaktivieren Sie die Optionen (standardmäßig werden sie aktiviert). Wenn leer, wird ein Diagramm erstellt, gefolgt von formatierten Informationen für die Tabellen. Andernfalls kann eine beliebige Kombination der folgenden gültigen Werte angegeben werden:
    • O: Nur ein Diagramm generieren. Formatieren Sie den Tabelleninhalt nicht.
    • T: Geben Sie die Gesamtkosten für jeden Betreiber im Diagramm an.
    • F: Die Kosten des ersten Tupels in das Diagramm aufnehmen.
    • I: Die I/O-Kosten unter jedem Betreiber in das Diagramm aufnehmen.
    • C: Die erwartete Ausgabekardinalität (Anzahl der Tupel) jedes Operators in das Diagramm einschließen.
    • Hinweis: Jede Kombination dieser Optionen ist zulässig, mit Ausnahme von F und T, die sich gegenseitig ausschließen.
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.

Die Prozedur führt die folgenden Funktionen aus:
  • 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

  1. 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.
  2. Rufen Sie die gespeicherte Prozedur EXPLAIN_FORMAT wie folgt auf:
    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 ?
  3. Extrahieren Sie die formatierten Daten aus der Tabelle EXPLAIN_STATEMENT, indem Sie die folgenden SQL-Anweisungen über den Parameter extract_sql OUT ausführen:
    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;
    Die Abfrage zeigt den formatierten EXPLAIN-Plan ähnlich dem folgenden Beispiel:
    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
    EXPLAIN-INSTANZ:
    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