SQLを分析する高度なテクニック:DB2チューニング・ベストプラクティス(6)(3/4 ページ)
本連載はDB2 UDB V8のシステム管理者、およびアプリケーション開発者のために、パフォーマンス・チューニングに必要な技法を紹介する。記事の原文はIBM developerWorksで2004年4月に公開された「Best practices for tuning DB2 UDB v8.1 and its databases」で、DB2の設計、配置、構成、SQL、運用管理、モニタリングといった内容を、実践的な操作を中心に解説している。想定する読者はDB2データベース管理の中級レベルのスキルを持っているユーザーである。スクリーン・ショットなど一部のコンテンツは、日本語版のものに差し替えている。(編集局)
アクセス・プランのExplain
SQL Explain機能はSQLコンパイラの機能の一部であり、ステートメントのアクセス・プラン、およびステートメントがコンパイルされた環境を表示するために使われます。Explainの情報は、いくつかの方法で収集および表示することができます。
Explainの情報は、以下を行うために役立ちます。
- 照会のために選択された実行プランを理解する
- アプリケーション・プログラムを設計する
- アプリケーションをいつ再バインドすべきかを決定する
- データベースを設計する
SQLステートメントのExplainデータを取得するには、Explain機能を呼び出す許可IDと同じスキーマを使用して、事前にExplain表を定義しておく必要があります。Explain表のDDLについては、DB2のインストール・ディレクトリの「sqllib/misc/explain.ddl」または「sqllib\misc\explain.ddl」を参照してください。
Explain表を消去するには、次のステートメントを実行します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このほかのExplain表は、カスケード削除の参照保全により、結果的にすべて消去されます。
Explainの出力結果を分析する場合は、以下の点について調べます。
- 同じ基本表の同じ列の集まりに対してORDER BY、GROUP BY、DISTINCTのいずれかの演算子が繰り返し使われている場合は、索引またはMQT(Materialized Query Table:マテリアライズ照会表)を使用することで、ソートを排除できます。
- 大規模なソート、ソート・オーバーフローの発生、表の頻繁な使用など、コストのかかる操作が行われている場合は、ソート・スペースの拡大、より適切な索引の使用、統計の更新、または異なるSQLの使用によりパフォーマンスを改善できます。
- 表スキャンが行われている場合は、索引を使用することでパフォーマンスを改善できます。
- 開始キーおよび停止キーを使用しない全索引スキャン、または使用する開始キーおよび停止キーの値の範囲が広い、選択性の低い索引スキャンが行われているかどうか。
- 単一列のフェッチが行われている場合は、INCLUDE索引を使用することで回避できます。
Visual Explain
Visual Explainは、とても簡単で、使いやすいツールです。Visual Explainは、パラメータ・マーカー(「?」で表されます)を含んでいるステートメントのExplainを行うことができます。ただし、GUIベースであるため、結果をほかのユーザーと共有することは困難です。「コントロール・センター」で、SQLステートメントのExplainを行いたいデータベースを右クリックして、「SQLのEXPLAIN...」を選択します。SQLテキスト・ボックスの中にSQLステートメントを入力して「OK」をクリックすると、グラフが生成されます。図1はグラフの表示例を示しています。
任意のノードをダブルクリックすると詳細な分析結果が得られます。
テキスト・ベースのExplain
テキスト・ベースのdb2exfmtとdb2explnは、(最初は)あまり読みやすいものではありませんが、出力ファイルを簡単に送信できるため、結果をほかのユーザーと容易に共有できます。
新しいデータを収集する前に、次のステートメントを実行してExplain表を消去しておきます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このほかのExplain表は、カスケード削除の参照保全により、結果的にすべて消去されます。
(Visual Explainも含めて)すべてのExplainの出力結果は、下から上へと読みます。
Visual Explainのように複数の画面に詳細が表示されるのではなく、単一のファイルにすべての詳細が出力されます。図2では、それぞれの演算子に番号が付けられており、ドキュメントの下の方に行くと、それぞれの演算子について詳しく説明されています。上の図では、演算子は次のように解釈できます。
表示項目 | 意味 |
---|---|
60.16 | 戻される行数(統計計算に基づく) |
HSJOIN | 演算子の種類(ハッシュ結合) |
( 2) | 演算子の番号 |
75.1017 | 累積タイマーオン(コスト) |
3 | 入出力コスト |
表1 テキストExplainの演算子の解釈(図2の赤丸部分) |
戻される行数、タイマーオン(timeron:コストを表すIBM独自の単位)、入出力コストはすべてオプティマイザの見積もりであり、実際の数値とは大きく異なる場合もあります。タイマーオンはDB2での測定単位であり、データベース・サーバが同じ照会に対して2つのプランを実行するのに必要なリソース、つまりコストの相対的な見積もりを得るために使用されます。見積もりの中で計算されるリソースには、重み付けされたプロセッサ・コストおよび入出力コストが含まれます。
db2exfmtを使用すると、単一ステートメントのExplainを行うことができます。例えば、次のように使います。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
複数の「explain all…」ステートメントを「;」で区切ったテキスト・ファイルを作成すると、複数のステートメントのExplainを一度に行うことができます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
パッケージに含まれている静的SQLのExplainを行いたい場合は、db2explnツールを使用する必要があります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
- チューニング→データベース・システム→データベース・パフォーマンスのチューニング→SQL Explain機能
- チューニング→データベース・システム→データベース・パフォーマンスのチューニング→SQL Explain機能→Explain情報の収集と分析のためのツール→Visual Explain
(次ページに続く)
Copyright © ITmedia, Inc. All Rights Reserved.