管理の手引き
SQL ステートメントの Explain データを獲得するには、
Explain 機能を呼び出す許可 ID と同じスキーマを使用して定義された、
一連の Explain 表を持っていなければなりません。
表の作成方法については、Explain 表の表定義を参照してください。
これらの表を定義しておくと、
SQL ステートメントがコンパイルされたときに Explain データが獲得され、
Explain データがすでに要求されています。
- 静的 SQL ステートメント、
または増分バインド SQL ステートメントの場合、
EXPLAIN ALL か EXPLAIN YES オプションのどちらかが BIND または PREP コマンドで指定されると、
Explain 表情報が獲得されます。
または、ソース・プログラムで静的 EXPLAIN SQL ステートメントが使用されます。
注: | 増分バインド SQL ステートメントは、実行時にコンパイルされると、
実行時および非バインド実行時に Explain 表に置かれます。
また、Explain 表への挿入の際に使用される Explain 表の修飾子および許可 ID は、
パッケージ所有者のものであり、パッケージを実行する使用者のものではありません。
|
- 動的 SQL ステートメントの場合、
次のいずれかの状況について、Explain 表情報が獲得されます。
-
EXPLAIN SQL ステートメント。
FOR SNAPSHOT 文節が使用されていないと、すべての Explain 情報が獲得され、
Explain 表に入れられます。
EXPLAIN SQL ステートメントの例は次のようなものです。
EXPLAIN PLAN FOR <any valid DELETE, INSERT, SELECT, SELECT INTO,
UPDATE, VALUES, or VALUES INTO SQL statement>
-
CURRENT EXPLAIN MODE 特殊レジスターが YES に設定される。
この設定により、SQL コンパイラーは Explain データを獲得し、
SQL ステートメントを実行して、照会の結果を戻します。
- CURRENT EXPLAIN MODE 特殊レジスターが EXPLAIN に設定される。
この設定により、SQL コンパイラーは Explain データを獲得しますが、
SQL ステートメントは実行しません。
- CURRENT EXPLAIN MODE 特殊レジスターが RECOMMEND INDEXES に設定される。
この設定により、SQL コンパイラーは、ADVISE_INDEX 表に置かれる Explain データおよび推奨索引を獲得します。
ただし、SQL ステートメントは実行されません。
- CURRENT EXPLAIN MODE 特殊レジスターが EVALUATE INDEXES に設定される。
この設定により、
SQL コンパイラーは ADVISE_INDEX 表に置かれた索引を使用します。
ユーザーは、評価する索引ごとに新しい行を挿入します。
各索引に必要な情報は、索引名、表名、および評価される索引を構成する列名です。
これらを入力したら、
特殊レジスター CURRENT EXPLAIN MODE を EVALUATE INDEXES に設定します。
その後、SQL コンパイラーは ADVISE_INDEX 表を走査します。
その表のフィールド USE_INDEX は、"Y" に設定されます (これらは、仮想索引と呼ばれます)。
EVALUATE INDEXES モードで実行するすべての動的ステートメントについては、
それらの仮想索引が使用可能であるとして Explain が実行されます。
仮想索引によってステートメントのパフォーマンスが改善される場合、
SQL コンパイラーは次に、その仮想索引を使用することを選択します。
パフォーマンスが改善されないのであれば、その索引は無視されます。
EXPLAIN の結果を参照すれば、
提案された索引が SQL コンパイラーによって使われたかどうかを確認できます。
使用された索引は、アクセスを向上させるために実装されたとみなされます。
- EXPLAIN ALL オプションが BIND または PREP コマンドで設定されている。
この設定により、CURRENT EXPLAIN MODE 特殊レジスターの設定値が NO であっても、
SQL コンパイラーは実行時に動的 SQL の Explain データを獲得します。
さらに、SQL ステートメントも実行して、照会の結果を戻します。
注: | Explain 情報が獲得されるのは、
SQL ステートメントがコンパイルされるときだけです。
初期コンパイルに続いて、環境の変更にステートメントの再コンパイルが必要なときだけ、
動的 SQL ステートメントが再コンパイルされます。
同じ PREPARE ステートメントが同じ SQL ステートメントに対して連続して発行される場合、
SQL ステートメントにはコンパイルだけが行われ、
最初に PREPARE ステートメントが発行されたときに、
環境が変わっていないと想定して Explain データが獲得されます。
|
EXPLAIN SQL ステートメントの使用、
または CURRENT EXPLAIN MODE レジスターの使用の詳細については、
SQL 解説書 を参照してください。
BIND コマンドおよび PREP コマンドの詳細については、
コマンド解説書 を参照してください。
SQL ステートメントがコンパイルされ、Explain データが要求されていると、
Explain スナップショット・データが獲得されます。
- 静的 SQL ステートメント、
または増分バインド SQL ステートメントの場合、
EXPLSNAP ALL か EXPLSNAP YES 文節のどちらかが BIND または PREP コマンドで指定されると、
Explain スナップショットが獲得されます。
または、FOR SNAPSHOT か WITH SNAPSHOT 文節を使用する静的 EXPLAIN SQL ステートメントがソース・プログラムで使用されます。
注: | 増分バインド SQL ステートメントは、実行時にコンパイルされると、
実行時および非バインド実行時に Explain 表に置かれます。
また、Explain 表への挿入の際に使用される Explain 表の修飾子および許可 ID は、
パッケージ所有者のものであり、パッケージを実行する使用者のものではありません。
|
- 動的 SQL ステートメントの場合、
次のいずれかの状態について、Explain スナップショットが獲得されます。
- FOR SNAPSHOT または WITH SNAPSHOT 文節を使用する EXPLAIN SQL ステートメント。
FOR SNAPSHOT 文節には、
Explain スナップショットに関連する情報の他に獲得された Explain 表情報はありません。
WITH SNAPSHOT 文節には、
Explain スナップショットに関連する情報に加えて獲得された Explain 表情報があります。
EXPLAIN SQL ステートメントを用いた Explain スナップショットの例は次のようなものです。
EXPLAIN PLAN FOR SNAPSHOT FOR <any valid DELETE, INSERT, SELECT,
SELECT INTO, UPDATE, VALUES, or VALUES INTO SQL statement>
Explain スナップショットが 1 つだけとられ、
獲得された情報は EXPLAIN_INSTANCE および EXPLAIN_STATEMENT 表に入れられます。
- CURRENT EXPLAIN SNAPSHOT 特殊レジスターが YES に設定される。
この設定により、SQL コンパイラーは Explain データのスナップショットをとり、
SQL ステートメントを実行して、照会の結果を戻します。
- CURRENT EXPLAIN SNAPSHOT 特殊レジスターが EXPLAIN に設定される。
この設定により、SQL コンパイラーは Explain データのスナップショットをとりますが、
SQL ステートメントは実行しません。
- EXPLSNAP ALL オプションが BIND または PREP コマンドで設定されている。
この設定により、CURRENT EXPLAIN SNAPSHOT 特殊レジスターの設定が NO であっても、
SQL コンパイラーは実行時に Explain データのスナップショットをとります。
さらに、SQL ステートメントも実行して、照会の結果を戻します。
注: | Explain 情報が獲得されるのは、
SQL ステートメントがコンパイルされるときだけです。
初期コンパイルに続いて、環境の変更にステートメントの再コンパイルが必要なときだけ、
動的 SQL ステートメントが再コンパイルされます。
同じ PREPARE ステートメントが同じ SQL ステートメントに対して連続して発行される場合、
SQL ステートメントにはコンパイルだけが行われ、
最初に PREPARE ステートメントが発行されたときに、
環境が変わっていないと想定して Explain データが獲得されます。
|
EXPLAIN SQL ステートメントと FOR SNAPSHOT または WITH SNAPSHOT 文節の使用、
あるいは CURRENT EXPLAIN SNAPSHOT レジスターの使用の詳細については、
SQL 解説書 を参照してください。
BIND コマンドおよび PREP コマンドの詳細については、
コマンド解説書 を参照してください。
[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]