SQL Explain機能はSQLコンパイラの機能の一部であり、ステートメントのアクセス・プラン、およびステートメントがコンパイルされた環境を表示するために使われます。Explainの情報は、いくつかの方法で収集および表示することができます。
Explainの情報は、以下を行うために役立ちます。
SQLステートメントのExplainデータを取得するには、Explain機能を呼び出す許可IDと同じスキーマを使用して、事前にExplain表を定義しておく必要があります。Explain表のDDLについては、DB2のインストール・ディレクトリの「sqllib/misc/explain.ddl」または「sqllib\misc\explain.ddl」を参照してください。
Explain表を消去するには、次のステートメントを実行します。
delete from schema.explain_instance |
(注:赤字は各自の環境に置き換えてください) |
このほかのExplain表は、カスケード削除の参照保全により、結果的にすべて消去されます。
Explainの出力結果を分析する場合は、以下の点について調べます。
Visual Explainは、とても簡単で、使いやすいツールです。Visual Explainは、パラメータ・マーカー(「?」で表されます)を含んでいるステートメントのExplainを行うことができます。ただし、GUIベースであるため、結果をほかのユーザーと共有することは困難です。「コントロール・センター」で、SQLステートメントのExplainを行いたいデータベースを右クリックして、「SQLのEXPLAIN...」を選択します。SQLテキスト・ボックスの中にSQLステートメントを入力して「OK」をクリックすると、グラフが生成されます。図1はグラフの表示例を示しています。
任意のノードをダブルクリックすると詳細な分析結果が得られます。
テキスト・ベースのdb2exfmtとdb2explnは、(最初は)あまり読みやすいものではありませんが、出力ファイルを簡単に送信できるため、結果をほかのユーザーと容易に共有できます。
新しいデータを収集する前に、次のステートメントを実行してExplain表を消去しておきます。
delete from schema.explain_instance |
(注:赤字は各自の環境に置き換えてください) |
このほかのExplain表は、カスケード削除の参照保全により、結果的にすべて消去されます。
(Visual Explainも含めて)すべてのExplainの出力結果は、下から上へと読みます。
Visual Explainのように複数の画面に詳細が表示されるのではなく、単一のファイルにすべての詳細が出力されます。図2では、それぞれの演算子に番号が付けられており、ドキュメントの下の方に行くと、それぞれの演算子について詳しく説明されています。上の図では、演算子は次のように解釈できます。
表示項目 | 意味 |
---|---|
60.16 | 戻される行数(統計計算に基づく) |
HSJOIN | 演算子の種類(ハッシュ結合) |
( 2) | 演算子の番号 |
75.1017 | 累積タイマーオン(コスト) |
3 | 入出力コスト |
表1 テキストExplainの演算子の解釈(図2の赤丸部分) |
戻される行数、タイマーオン(timeron:コストを表すIBM独自の単位)、入出力コストはすべてオプティマイザの見積もりであり、実際の数値とは大きく異なる場合もあります。タイマーオンはDB2での測定単位であり、データベース・サーバが同じ照会に対して2つのプランを実行するのに必要なリソース、つまりコストの相対的な見積もりを得るために使用されます。見積もりの中で計算されるリソースには、重み付けされたプロセッサ・コストおよび入出力コストが含まれます。
db2exfmtを使用すると、単一ステートメントのExplainを行うことができます。例えば、次のように使います。
explain all for SQL_statement |
リスト4 単一ステートメントについてのテキストExplain出力の生成 (注: 記号は表示の都合で折り返していることを表します。赤字は各自の環境に置き換えてください) |
複数の「explain all…」ステートメントを「;」で区切ったテキスト・ファイルを作成すると、複数のステートメントのExplainを一度に行うことができます。
db2 -tf file_with_statements |
リスト5 複数ステートメントについてのテキストExplain出力の生成 (注: 記号は表示の都合で折り返していることを表します。赤字は各自の環境に置き換えてください) |
パッケージに含まれている静的SQLのExplainを行いたい場合は、db2explnツールを使用する必要があります。
db2expln -database dbname -schema schema_name |
(注: 記号は表示の都合で折り返していることを表します。赤字は各自の環境に置き換えてください) |
(次ページに続く)
Copyright © ITmedia, Inc. All Rights Reserved.