Puede ejecutar el procedimiento almacenado ' EXPLAIN_FORMAT
en Data Virtualization para ejecutar el comando ' db2exfmt
. Puede especificar el formato de la información de EXPLAIN
que se genera al crear planes de acceso de consulta y descargar la salida EXPLAIN
generada en archivos de texto.
El procedimiento EXPLAIN_FORMAT
formatea el contenido de las tablas de EXPLAIN
basándose en los parámetros especificados y actualiza los datos formateados en la tabla EXPLAIN_STATEMENT bajo la columna EXPLAIN_FORMAT_TEXT. El procedimiento también devuelve una sentencia SQL como parámetro OUTPUT, que se puede utilizar para captar los datos formateados de la tabla EXPLAIN_STATEMENT. Para obtener más información sobre la tabla EXPLAIN
, consulte Tabla EXPLAIN_STATEMENT en la documentación de Db2® .
El procedimiento no emite una sentencia COMMIT
después de actualizar las tablas EXPLAIN
. El interlocutor del procedimiento debe emitir una sentencia COMMIT
.
El esquema es SYSPROC
.
Autorizaciones
- Privilegio EXECUTE para la rutina
- Autorización DATAACCESS
- Autorización DBADM
- Autorización SQLADM
- Privilegio INSERT para las tablas de Explain en el esquema especificado
- Privilegio CONTROL para las tablas de Explain en el esquema especificado
- Autorización DATAACCESS
- Privilegio PUBLIC por omisión
- EJECUTAR
Sintaxis
---
[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 del procedimiento
- esquema_explicación
- Argumento de entrada o salida de tipo VARCHAR (128) que especifica el esquema que contiene las tablas de Explain donde se debe escribir la información de EXPLAIN. Si se especifica una serie vacía o NULL, se realiza una búsqueda de las tablas de Explain bajo el esquema por omisión del ID de autorización actual y, a continuación, el esquema SYSTOOLS. Si las tablas de Explain no se pueden encontrar bajo el esquema especificado, se devuelve SQL0219N . Si el interlocutor no tiene el privilegio INSERT en las tablas de Explain del esquema especificado, se devuelve SQL0551N .
- EXPLAIN_REQUESTER
- Argumento de entrada o salida de tipo VARCHAR (128) que especifica el ID de autorización del iniciador de esta petición de Explain. Si se especifica una serie vacía o NULL, se realiza una búsqueda de las tablas de Explain bajo la sesión actual.
- EXPLAIN_TIME
- Argumento de entrada o salida de tipo TIMESTAMP que contiene la hora de inicio de la solicitud de Explain. Si se especifica NULL, obtenga la última petición de explicación.
- SOURCE_NAME
- Argumento de entrada o salida de tipo VARCHAR (128) que especifica el nombre de paquete (SOURCE_NAME) o el nombre de objeto para la solicitud de explicación. Se asume el paquete si no se especifica la opción object_type.
- SOURCE_SCHEMA
- Argumento de entrada o salida de tipo VARCHAR (128) que especifica el esquema de paquete (SOURCE_SCHEMA) de la solicitud de paquete. Si no se especifica un esquema de paquete, esta opción se establece en '%'. Si se proporciona el parámetro object_module para el procedimiento o función, esta opción se corresponde con el esquema del módulo. Si el tipo de objeto es un procedimiento, función o desencadenante, este es el esquema del objeto asociado. Si el tipo de objeto no es un procedimiento, función o desencadenante, y no se proporciona el parámetro object_module, el esquema se establece en el valor del registro especial CURRENT SCHEMA.
- SOURCE_VERSION
- Argumento de entrada o salida de tipo VARCHAR (128) que especifica la versión de paquete (SOURCE_VERSION) de la petición de explicación. El valor predeterminado es%.
- section_number
- Argumento de entrada o salida de tipo INTEGER que contiene el número de sección en el origen. Para solicitar todas las secciones especifique cero como valor.
- tipo_objeto
- Tipo del objeto especificado. El valor por omisión es paquete.
- OBJECT_MODULE
- Nombre de módulo de la rutina cuando la opción object_type es P, SP, F o SF. Los nombres de módulo se ignoran si no se especifica el parámetro object_type.
- distintivos de formato
- Argumento de entrada de tipo VARCHAR (128) que contiene varios distintivos que se pueden combinar juntos como una serie. Si se especifica una serie vacía o NULL, las opciones de formato se determinan automáticamente.
- O: Resumen de operador
- Y: Forzar el formateo de la sentencia original incluso si la columna EXPLAIN_STATEMENT.EXPLAIN_TEXT contiene formato. El comportamiento por omisión consiste en detectar automáticamente si la sentencia requiere formato y en utilizar el formato original cuando exista.
- C: Utilizar un modo más compacto al formatear sentencias y predicados. El valor predeterminado es una modalidad expandida. Si no se especifica Y, entonces C entra en vigor sólo si la detección automática determina que la sentencia requiere formateo.
- distintivos_gráficos
- Argumento de entrada de tipo VARCHAR (128) que contiene varios distintivos de gráfico que se pueden combinar juntos como una serie. Si se especifica una serie vacía o NULL, 'TIC' es la opción predeterminada.
- extract_sql
- Argumento de salida de tipo VARCHAR (2048) que contiene la sentencia SQL que se puede utilizar para extraer los datos formateados en EXPLAIN_STATEMENT.
Notas de uso
Los parámetros explain_schema, explain_requester, explain_time, source_schema, source_name, source_version, section_number constituyen la clave utilizada para buscar la información de la sección en las tablas de Explain. Si se han proporcionado entradas NULL, vacías o comodín para estos parámetros, el valor real utilizado se actualizará en el parámetro en el momento de la devolución.
- Utilice los parámetros pasados para dar formato a la información de EXPLAIN recuperada de las tablas de Explain.
- Actualice los datos formateados en la tabla EXPLAIN_STATEMENT bajo la columna EXPLAIN_FORMAT_TEXT.
- Devuelve los valores reales utilizados para todos los parámetros INOUT (es decir, explain_schema, explain_requester, explain_time, source_schema, source_name, source_version, section_number).
- Si el procedimiento es satisfactorio, el parámetro OUT EXTRACT_SQL se llena con una sentencia SQL de ejemplo que se puede utilizar para recuperar datos formateados de la tabla EXPLAIN_STATEMENT. De lo contrario, se rellena con un mensaje de error.
Ejemplo
- Cree las tablas de Explain y recopile datos de Explain para la consulta o consultas de interés utilizando los métodos documentados en https://www.ibm.com/docs/en/db2/11.5?topic=optimization-explain-facility.
- Llame al procedimiento almacenado
EXPLAIN_FORMAT
, tal como se indica a continuación:Call explain_format('DB2INST1', 'DB2INST1', '2022-11-08-02.28.42.810882', 'SQLC2P31', 'NULLID', '', 0, '', '', 'T', ?)
Utilice los parámetros de la tabla siguiente:
Tipo Lista de parámetros Valor de ejemplo en el ejemplo anterior INOUT Esquema_explicación 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 Distintivos_gráficos T OUT SQL de extracción ? - Extraiga los datos formateados de la tabla EXPLAIN_STATEMENT ejecutando la siguiente sentencia SQL desde el parámetro OUT extract_sql :
La consulta muestra el plan de explicación con formato similar al ejemplo siguiente: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 INSTANCIA: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