説明/参照:
Explanation:
15.2.2 SQL計画ベースラインの選択
SQL計画のベースライン選択フェーズでは、格納された計画の履歴に基づいて計画の変更が検出され、一連のSQL文に対する潜在的なパフォーマンスの低下を回避する計画が選択されます。
データベースがSQL文をコンパイルするたびに、オプティマイザは次の処理を行います。
1.コストベースの検索方法を使用してベスト・コスト・プランを構築する
2. SQL計画のベースラインで一致するプランを検索しようとします。
3.一致するものがあるかどうかに応じて、次のいずれかを行います。
見つかった場合、オプティマイザは一致したプランを使用して進みます。見つからなければ、オプティマイザは評価します

SQL計画のベースラインで受け入れられた各プランのコストとコストの最も低いプランを選択します。オプティマイザがSQLステートメントの計画履歴内のプランと一致しないベスト・コスト・プランを選択すると、新しいプランが示されます。データベースは、この計画を計画履歴に非受入れ計画として追加します。
データベースは、パフォーマンスの低下を引き起こさないことが確認されるまで、新しいプランを使用しません。
ただし、システムの変更(索引の削除など)により、受け入れられたすべてのプランが再現不能になる場合、オプティマイザは最良のプランを選択します。したがって、SQL計画のベースラインが存在すると、オプティマイザはSQL文に対して慎重な計画選択戦略を使用します。
SQL計画ベースラインを使用可能にするには、OPTIMIZER_USE_SQL_PLAN_BASELINES初期化パラメータをTRUE(デフォルト)に設定します。
SQL計画のベースラインには、1つ以上の受け入れられた計画が含まれています。
計画履歴は、オプティマイザが時間の経過とともにSQL文に対して生成するプランの集合(受け入れられたものと受け入れられないものの両方)であり、ベースラインの計画は計画履歴のサブセットを形成します。たとえば、オプティマイザがSQL計画のベースラインに対して最初の許容可能な計画を生成した後で、後続の計画は計画履歴の一部ですが、計画のベースラインの一部ではありません。
