SQL コンパイラーは、実行可能なアクセス・プランを作成する前に、 いくつかのステップを実行します。 それらのステップは、図 78 に示されています。
![]() |
この図は、照会グラフ・モデルが SQL コンパイラーの主要構成要素であることを示しています。 照会グラフ・モデル とは、以下に説明するように、 コンパイル処理全体を通じて照会を表示するのに使用される、 メモリー内の内部的データベースです。
SQL コンパイラーの最初の作業は、SQL 照会を分析して構文の妥当性検査を行うことです。 構文エラーが検出されると、SQL コンパイラーは処理を停止し、 SQL ステートメントをコンパイルしようとしていたアプリケーションに対して、 該当する SQL エラーが返されます。 構文解析が完了すると、照会の内部表示が作成されます。
コンパイラーの 2 番目の作業は、 ステートメント中に矛盾がないことを確認することです。 この意味検査の 1 つの簡単な例は、 YEAR スカラー関数用に指定した列のデータ・タイプが 日時データ・タイプであるか確認するものです。 この 2 番目の段階でも、 コンパイラーによって機能上の意味が照会グラフ・モデルに追加されます。 それには、参照制約、表検査制約、トリガー、および視点などの結果が含まれます。
照会グラフ・モデルには、照会ブロック、副照会、相関、派生表、式、 データ・タイプ、データ・タイプ変換、コード・ページ変換、 および区分化キーを含む、照会の意味すべてが含まれます。
SQL コンパイラーの第 3 段階では、 照会グラフ・モデルで提供された大域的な意味を使用して、 照会をもっと最適化しやすい形に変形します。 たとえば、コンパイラーは述部を移動することにより、 適用されるレベルを変更し、照会のパフォーマンスを改善することがあります。 このタイプの操作のことを、 一般述部後入れ先出し といいます。 詳細については、SQL コンパイラーによる照会書き直しを参照してください。
区分データベース環境で作業している場合には、 以下に関連するような一部の照会操作では、計算量が多くなります。
相関副照会は、 副照会の外側にある表の列への参照を含む副照会です。
この環境では、一部の照会で、照会の書き直しの一部として非相関化が行われる場合があります。
転送された照会は、照会グラフ・モデルに保管されます。
このステップの主な作業は、データ・ソースにおいて、 ある操作をリモートで評価 ("後入れ先出し") できるかどうかを、 DB2 最適化プログラムに通知することです。 このタイプの後入れ先出しアクティビティーは、データ・ソース照会に特有のものであり、 一般の述部の後入れ先出し操作を拡張するものとなります。
連合データベース照会を実行するのでなければ、 このステップは関係ありません。 詳細については、後入れ先出し分析を参照してください。
SQL コンパイラーのうちの SQL 最適化プログラムの部分は、 照会グラフ・モデルを入力として使用し、 ユーザー要求を満たす多数の代替実行プランを生成します。 また、表、索引、列、および関数を使用する各代替プランの実行コストを見積もり、 実行コストの見積もりが最も小さいプランを選択します。 最適化プログラムは、 照会グラフ・モデルを使用して照会の意味を分析したり、 索引、基本表、派生表、副照会、相関、および再帰を含め、 広範囲にわたる要因に関する情報を獲得したりします。
最適化プログラムの部分では、3 番目のタイプの後入れ先出し操作である、 集約および分類 を考慮することもできます。 この操作では、各操作の評価をデータ管理サービス構成要素に知らせることにより、 パフォーマンスを改善することができます。 詳細については、集約および分類の後入れ先出し操作を参照してください。
さらに最適化プログラムでは、ページ・サイズの選択時に、 別のサイズのバッファー・プールが存在するかどうかも考慮されます。 環境に区分データベースが含まれる場合には、そのことも、 対称マルチプロセッサー (SMP) 環境で区画内並行操作の可能性のために選択されたプランを拡張する機能と同様に、 考慮されます。 この情報は、最適化プログラムが照会にとって最適のアクセス・プランを選択するのに使用されます。 詳細については、データ・アクセスの概念と最適化を参照してください。
SQL コンパイラーのこのステップによる出力は、「アクセス・プラン」です。 このアクセス・プランは、Explain 表にキャプチャーされる情報の基礎となるものです。 この情報は、アクセス・プランを生成するのに使われ、 Explain スナップショットによってキャプチャーできます。 (Explain のトピックについては、第 26 章, SQL Explain 機能を参照してください。)
DB2 最適化プログラムで選択した最終プランは、 リモート・データ・ソースに対して実行される一連のステップで構成されています。 データ・ソースごとに実行されるこれらの操作では、リモート SQL 生成のステップにより、 データ・ソース SQL ダイアレクトに基づく有効な SQL ステートメントが作成されます。
連合データベース照会を実行するのでなければ、 このステップは関係ありません。 詳細については、リモートでの SQL 生成とグローバル最適化を参照してください。
SQL コンパイラーの最終ステップでは、 アクセス・プラン と照会グラフ・モデルを使用して、 照会の実行可能なアクセス・プラン、つまりセクションを作成します。 このコード生成ステップでは、照会グラフ・モデルの情報を使用して、 1 つの照会で 1 回だけ計算するだけで済む式が繰り返し実行されないようにします。 この最適化が行われる例としては、 コード・ページ変換やホスト変数の使用を含むものがあげられます。
静的 SQL のアクセス・プランに関する情報は、 システム・カタログ表に保管されます。 パッケージが実行されると、 データベース・マネージャーはシステム・カタログ表に保管されている情報を使用して、 データのアクセス方法を決め、照会結果を提供します。 db2expln ツールによって使用されるのは、この情報です。 (Explain のトピックについては、第 26 章, SQL Explain 機能を参照してください。)
良いパフォーマンスを得たい照会において使用される表に対しては、 RUNSTATS を定期的に実行することをお勧めします。 定期的に実行すると、最適化プログラムには、 データの性質に関する適切な統計情報が提供されることになります。 RUNSTATS を実行しなかった (または最適化プログラムが、 RUNSTATS が空かほぼ空の表に対して実行されたと想定している) 場合には、 最適化プログラムは、省略時値を使用するか、 あるいはディスク上に表を保管するのに使用されたファイル・ページ数 (FPAGES) に基づいて統計結果を引き出すように試みます。