Vous pouvez exécuter la procédure stockée " EXPLAIN_FORMAT
dans la Data Virtualization pour exécuter la commande " db2exfmt
. Vous pouvez spécifier le formatage des informations EXPLAIN
générées lorsque vous générez des plans d'accès de requête et télécharger la sortie EXPLAIN
générée dans des fichiers texte.
La procédure EXPLAIN_FORMAT
formate le contenu des tables EXPLAIN
en fonction des paramètres spécifiés et met à jour les données formatées dans la table EXPLAIN_STATEMENT sous la colonne EXPLAIN_FORMAT_TEXT. La procédure renvoie également une instruction SQL en tant que paramètre OUTPUT, qui peut être utilisée pour extraire les données formatées de la table EXPLAIN_STATEMENT. Pour plus d'informations sur la table EXPLAIN
, voir EXPLAIN_STATEMENT table dans la documentation Db2® .
La procédure n'émet pas d'instruction COMMIT
après la mise à jour des tables EXPLAIN
. L'appelant de la procédure doit émettre une instruction COMMIT
.
Le schéma est SYSPROC
.
Autorisations
- Privilège EXECUTE sur la routine
- Droits d'accès DATAACCESS
- Droits d'accès DBADM
- Droits d'accès SQLADM
- Privilège INSERT sur les tables EXPLAIN dans le schéma spécifié
- Privilège CONTROL sur les tables EXPLAIN dans le schéma spécifié
- Droits d'accès DATAACCESS
- Privilège PUBLIC par défaut
- EXECUTE
Syntaxe
---
[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 --'
---
Paramètres de procédure
- schéma_explicatif
- Argument d'entrée ou de sortie de type VARCHAR (128) qui spécifie le schéma contenant les tables EXPLAIN dans lesquelles les informations EXPLAIN doivent être écrites. Si une chaîne vide ou NULL est spécifiée, une recherche est effectuée pour les tables EXPLAIN sous le schéma par défaut de l'ID autorisation en cours, puis le schéma SYSTOOLS. Si les tables Explain sont introuvables sous le schéma spécifié, SQL0219N est renvoyé. Si l'appelant ne dispose pas du privilège INSERT sur les tables EXPLAIN du schéma spécifié, SQL0551N est renvoyé.
- demande_explicatif
- Argument d'entrée ou de sortie de type VARCHAR (128) qui spécifie l'ID autorisation de l'initiateur de cette demande d'explication. Si une chaîne vide ou NULL est spécifiée, une recherche est effectuée pour les tables EXPLAIN sous la session en cours.
- EXPLAIN_TIME
- Argument d'entrée ou de sortie de type TIMESTAMP qui contient l'heure d'initiation de la requête Explain. Si NULL est spécifié, obtenez la demande d'explication la plus récente.
- SOURCE_NAME
- Argument d'entrée ou de sortie de type VARCHAR (128) qui spécifie le nom de package (SOURCE_NAME) ou le nom d'objet pour la demande Explain. Le package est utilisé si l'option object_type n'est pas spécifiée.
- SOURCE_SCHEMA
- Argument d'entrée ou de sortie de type VARCHAR (128) qui spécifie le schéma de package (SOURCE_SCHEMA) de la demande de package. Si aucun schéma de package n'est spécifié, cette option est définie sur'%'. Si le paramètre object_module est fourni pour la procédure ou la fonction, cette option correspond au schéma du module. Si le type d'objet est une procédure, une fonction ou un déclencheur, il s'agit du schéma de l'objet associé. Si le type d'objet n'est pas une procédure, une fonction ou un déclencheur et que le paramètre object_module n'est pas fourni, le schéma est défini sur la valeur du registre spécial CURRENT SCHEMA.
- version_source
- Argument d'entrée ou de sortie de type VARCHAR (128) qui spécifie la version de package (SOURCE_VERSION) de la demande Explain. La valeur par défaut est%.
- section_number
- Argument d'entrée ou de sortie de type INTEGER qui contient le numéro de section dans la source. Pour demander toutes les sections, indiquez zéro.
- type_objet
- Type de l'objet indiqué. Le type par défaut est package.
- module_objet
- Nom de module de la routine lorsque l'option object_type est P, SP, F ou SF. Les noms de module sont ignorés si le paramètre object_type n'est pas spécifié.
- indicateurs de format
- Argument d'entrée de type VARCHAR (128) contenant plusieurs indicateurs pouvant être combinés en tant que chaîne. Si une chaîne vide ou NULL est spécifiée, les options de formatage sont déterminées automatiquement.
- O: Récapitulatif de l'opérateur
- Y: Forcer le formatage de l'instruction d'origine même si la colonne EXPLAIN_STATEMENT.EXPLAIN_TEXT contient le formatage. Le comportement par défaut consiste à détecter automatiquement si l'instruction requiert un formatage et à utiliser le formatage d'origine lorsqu'il existe.
- C: Utilisez un mode plus compact lors du formatage des instructions et des prédicats. La valeur par défaut est un mode étendu. Si Y n'est pas spécifié, C ne prend effet que si la détection automatique détermine que l'instruction nécessite un formatage.
- graph_flags
- Argument d'entrée de type VARCHAR (128) qui contient plusieurs indicateurs de graphique pouvant être combinés en tant que chaîne. Si une chaîne vide ou NULL est spécifiée,'TIC'est l'option par défaut.
- extract_sql
- Argument de sortie de type VARCHAR (2048) contenant l'instruction SQL qui peut être utilisée pour extraire les données formatées par rapport à EXPLAIN_STATEMENT.
Notes d'utilisation
Les paramètres explain_schema, explain_requester, explain_time, source_schema, source_name, source_version, section_number comprennent la clé utilisée pour rechercher les informations de la section dans les tables EXPLAIN. Si des entrées NULL, vides ou génériques ont été fournies pour ces paramètres, la valeur réelle utilisée sera mise à jour dans le paramètre lors du retour.
- Utilisez les paramètres transmis pour formater les informations EXPLAIN extraites des tables EXPLAIN.
- Mettez à jour les données formatées dans la table EXPLAIN_STATEMENT sous la colonne EXPLAIN_FORMAT_TEXT.
- Renvoie les valeurs réelles utilisées pour tous les paramètres INOUT (c'est-à-dire explain_schema, explain_requester, explain_time, source_schema, source_name, source_version, section_number).
- Si la procédure aboutit, le paramètre OUT EXTRACT_SQL est rempli avec un exemple d'instruction SQL qui peut être utilisé pour extraire des données formatées de la table EXPLAIN_STATEMENT. Sinon, il est rempli avec un message d'erreur.
Exemple
- Créez les tables EXPLAIN et collectez des données EXPLAIN pour la ou les requêtes qui vous intéressent à l'aide des méthodes décrites dans https://www.ibm.com/docs/en/db2/11.5?topic=optimization-explain-facility.
- Appelez la procédure mémorisée
EXPLAIN_FORMAT
, comme suit:Call explain_format('DB2INST1', 'DB2INST1', '2022-11-08-02.28.42.810882', 'SQLC2P31', 'NULLID', '', 0, '', '', 'T', ?)
Utilisez les paramètres du tableau suivant:
Type Liste de paramètres Exemple de valeur dans l'exemple ci-dessus INOUT Schéma_explicatif DB2INST1 INOUT Demandeur d'explication DB2INST1 INOUT EXPLAIN_TIME 2022-11-08-02.28.42.810882 INOUT SOURCE_NAME SQLC2P31 INOUT SOURCE_SCHEMA NULLID INOUT Version_source INOUT section_number 0 IN OBJECT_TYPE IN Module_objet IN Indicateurs graphiques T OUT SQL d'extraction ? - Extrayez les données formatées de la table EXPLAIN_STATEMENT en exécutant l'instruction SQL suivante à partir du paramètre extract_sql OUT:
La requête affiche le plan Explain formaté comme dans l'exemple suivant: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;
INSTANCE D'EXPLICATION: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