アクセス・プランの再利用

バインドまたは再バインド操作を繰り返しても、パッケージ内の静的 SQL ステートメント用に選択されたアクセス・プランが、既存のアクセス・プランのまま変わらないように、あるいはそれと非常に類似したものとなるように要求することができます。

アクセス・プランの再利用により、明示的な承認なしにプランに大きな変更が加えられないようにすることができます。 この場合、照会がアクセス・プランの改善見込みの恩恵を受けないことにもなり得ますが、アクセス・プランの再利用に備わっている制御により、そのような改善をテストし、準備ができたらそれをインプリメントすることが可能です。 そのときまで、安定した、予測可能なパフォーマンスの既存のアクセス・プランを使用し続けることができます。

アクセス・プランの再利用は、プラン・ロックダウンとも呼ばれます。

アクセス・プランの再利用は、ALTER PACKAGE ステートメントを介して、または BINDREBIND、または PRECOMPILE コマンドの APREUSE オプションを使用することによって、使用可能にできます。 アクセス・プランの再利用の対象であるパッケージは、SYSCAT.PACKAGES カタログ・ビューの APREUSE 列の値が Y です。

ALTER_ROUTINE_PACKAGE プロシージャーは、SQL プロシージャーのようなコンパイルされた SQL オブジェクトでアクセス・プランの再利用を可能にする便利な方法です。 ただし、再バインドされる前にオブジェクトがドロップされるため、アクセス・プランは、コンパイルされたオブジェクトの妥当性再検査中には再利用できません。 この場合、APREUSE はパッケージが次にバウンドまたは再バインドされるときに初めて有効になります。

アクセス・プランの再利用が最も有効なのは、スキーマおよびコンパイル環境への変更が最小に保たれるときです。 大きな変更が行われる場合、以前のアクセス・プランを再作成できない場合があります。 そのような大きな変更の例には、アクセス・プランで使用されていた索引のドロップ、または異なる最適化レベルでの SQL ステートメントの再コンパイルが含まれます。 また、照会コンパイラーによるステートメントの分析に大きな変更があった場合にも、以前のアクセス・プランが再利用できなくなります。

アクセス・プランの再利用を最適化ガイドラインと組み合わせることができます。 ステートメント・レベルのガイドラインは、それが適用される静的 SQL ステートメントに対するアクセス・プランの再利用よりも優先されます。 指定されている一般的な最適化ガイドラインと競合しない場合、ステートメント・レベルのガイドラインのない静的ステートメントに対するアクセス・プランを再利用できます。 空のガイドラインを持つステートメント・プロファイルを使用することにより、特定のステートメントではアクセス・プランの再利用を無効にする一方で、パッケージ内の他の静的ステートメントにはプランの再利用を有効なままにすることができます。

注: バージョン 9.7 より前のリリースで作成されたパッケージからのアクセス・プランは再利用できません。

アクセス・プランが再利用できない場合、コンパイルが続行されますが、警告 (SQL20516W) が、アクセス・プランを再利用する試行が成功しなかった理由を示す理由コードと共に戻されます。 追加の情報が、Explain 機能を介して使用可能な診断メッセージで時々提供されます。