Question & Answer
Question
アクセス・プランを取得する際に利用する Explain 表の作成方法と削除方法を教えて下さい。
Answer
Explain 表は、Explain 機能が活動化された時点のアクセス・プランをキャプチャーします。 Explain 表は、Explain 機能を呼び出す前に作成しておく必要があります。
【V9.1 以前の作成方法】
Unix/Linux 環境では $INSTHOME/sqllib/misc/EXPLAIN.DDL に、Windows 環境では %DB2PATH%\MISC\EXPLAIN.DDL に EXPLAIN 表の DDL が保管されています。
DDL では表のスキーマ名や表スペースは指定されていないため、表は CURRENT SCHEMA のスキーマ名で、ユーザーに USE 特権が付与されている表スペース内に作成されます。
以下のように DDL を実行してください。
【V9.1 以前の作成方法】
Unix/Linux 環境では $INSTHOME/sqllib/misc/EXPLAIN.DDL に、Windows 環境では %DB2PATH%\MISC\EXPLAIN.DDL に EXPLAIN 表の DDL が保管されています。
DDL では表のスキーマ名や表スペースは指定されていないため、表は CURRENT SCHEMA のスキーマ名で、ユーザーに USE 特権が付与されている表スペース内に作成されます。
以下のように DDL を実行してください。
- [Unix/Linux 環境の場合]
$ db2 connect to データベース名 $ db2 -tf ~/sqllib/misc/EXPLAIN.DDL
- [Windows 環境の場合]
db2 connect to [データベース名] db2 -tf "%DB2PATH%\MISC\EXPLAIN.DDL"
【V9.1 以前の削除方法】
EXPLAIN.DDL の中で CREATE されているオブジェクトを確認し DROP してください。
オブジェクトの中には依存関係が設定されているものがあるため、CREATE の時と逆の順番で削除してください。
【V9.5 以降の作成方法】
V9.5 以降では上記の EXPLAIN.DDL を利用する以外に、SYSINSTALLOBJECTS プロシージャーを利用して EXPLAIN 表を作成できます。
プロシージャーの第 3 引数は表を作成する表スペース名を、第 4 引数には表のスキーマ名を指定してください。
それぞれ NULL もしくは空文字の場合、SYSTOOLSPACE 表スペースに SYSTOOLS スキーマで作成されます。
SYSTOOLSPACE 表スペースがまだ存在しない場合、自動で作成されます。
以下の実行例では、SYSTOOLSPACE 表スペースに、接続ユーザー名のスキーマで Explain 表を作成します。
EXPLAIN.DDL の中で CREATE されているオブジェクトを確認し DROP してください。
オブジェクトの中には依存関係が設定されているものがあるため、CREATE の時と逆の順番で削除してください。
【V9.5 以降の作成方法】
V9.5 以降では上記の EXPLAIN.DDL を利用する以外に、SYSINSTALLOBJECTS プロシージャーを利用して EXPLAIN 表を作成できます。
プロシージャーの第 3 引数は表を作成する表スペース名を、第 4 引数には表のスキーマ名を指定してください。
それぞれ NULL もしくは空文字の場合、SYSTOOLSPACE 表スペースに SYSTOOLS スキーマで作成されます。
SYSTOOLSPACE 表スペースがまだ存在しない場合、自動で作成されます。
以下の実行例では、SYSTOOLSPACE 表スペースに、接続ユーザー名のスキーマで Explain 表を作成します。
$ db2 connect to データベース名
$ db2 "call SYSPROC.SYSINSTALLOBJECTS( 'EXPLAIN', 'C' , '', CURRENT USER )"
【V9.5 以降の削除方法】
SYSINSTALLOBJECTS プロシージャーを利用して、Explain 表を削除できます。
第 4 引数には DROP する表のスキーマ名を指定してください。
NULL もしくは空文字の場合、SYSTOOLS スキーマの表が削除されます。
以下の実行例では、接続ユーザー名のスキーマの Explain 表を削除します。
運用上の考慮点
SYSINSTALLOBJECTS プロシージャーを利用して、Explain 表を削除できます。
第 4 引数には DROP する表のスキーマ名を指定してください。
NULL もしくは空文字の場合、SYSTOOLS スキーマの表が削除されます。
以下の実行例では、接続ユーザー名のスキーマの Explain 表を削除します。
$ db2 connect to [データベース名]
$ db2 "call SYSPROC.SYSINSTALLOBJECTS( 'EXPLAIN', 'D', '', CURRENT USER )"
- Explain 表のメンテナンス
Explain 表にはカスケード削除が指定されているため、EXPLAIN_INSTANCE 表の行を削除すると、他の Explain 表に格納されている関連する Explain 情報が削除されます。
このため、保管した Explain 情報をすべてクリアしたい場合は、EXPLAIN_INSTANCE の全行を削除してください。
以下の実行例では、接続ユーザー名のスキーマの Explain 情報をクリアします。$ db2 connect to データベース名 $ db2 delete from EXPLAIN_INSTANCE
なお、大量の Explain 情報が保管されており、削除がログフルで失敗する場合は以下の FAQ を参照してください。
NOT LOGGED INITIALLY を指定する場合、EXPLAIN_INSTANCE 表だけでなく、EXPLAIN_* 表すべてに指定する必要があります。
[Db2] 大量の行を削除する時のログ量を減らす方法
- Explain 表のアップグレード
Db2 のバージョンごとに Explain 表の定義は変更されることがあります。
以前のバージョンの Explain 表の内容をそのまま使いたい場合は、db2exmig コマンドを実行して既存の Explain 表の定義を変更する必要があります。
Explain 表のアップグレード
[Db2] SQL の実行計画 (Explain) を取得する方法
Explain 表および Explain 情報の編成
SYSINSTALLOBJECTS プロシージャー
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート
Explain 表および Explain 情報の編成
SYSINSTALLOBJECTS プロシージャー
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート
[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PkcAAE","label":"Compiler"},{"code":"a8m500000008PkyAAE","label":"Compiler-\u003EOptimization db2explain db2advis"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]
Was this topic helpful?
Document Information
Modified date:
24 August 2023
UID
swg21596631