対策する資格
Java Silver ・ 近日ORACLE Silver ・ 近日
Gold 保有者 監修1Z0-083 対応
SQL Plan Baseline(SPM)難易度 高無料

ある SQL に対し SQL Plan Management(SPM)で承認済み(accepted)のプランを持つ SQL Plan Baseline が1つ存在する(OPTIMIZER_USE_SQL_PLAN_BASELINES=TRUE=既定)。索引追加により、オプティマイザがこの SQL に対し従来より低コストの新しい実行計画を見つけた。次回以降この SQL を実行したときの挙動として最も適切なものを選べ。(単一選択)

  1. A新しい計画の方がコストが低いので、オプティマイザは即座に新計画へ切り替えて実行する。ベースラインは自動的に新計画で上書きされる
  2. Bオプティマイザは引き続きベースライン内の承認済み計画を使う。新しい低コスト計画は未承認(unaccepted)としてプラン履歴に追加されるだけで、そのままでは使われない。使わせるには DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE 等で検証・承認(accept)する必要がある
  3. Cベースラインが存在する SQL は、新しい計画を一切記録せず破棄するため、プラン履歴にも残らない
  4. Dベースラインがあると新索引はその SQL では使われない。索引を使うにはベースラインを DROP するしかない
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:BGold監修

解説

SQL Plan Management(SPM)/SQL Plan Baseline の目的は実行計画の安定性である。 「コストが低いから」という理由だけで計画を勝手に乗り換えて性能が突然劣化する(plan regression)のを防ぐ。

ベースラインを持つ SQL の挙動(OPTIMIZER_USE_SQL_PLAN_BASELINES=TRUE):

  • オプティマイザはベースライン内の「承認済み(accepted)かつ有効・再現可能」な計画のうち最小コストのものを選んで使う。
  • 今回見つかった新しい低コスト計画は、ベースラインに無い計画なのでそのまま採用されない。代わりに未承認(non-accepted)としてプラン履歴に記録される。
  • その新計画を使えるようにするには、DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE(または自動 SPM 進化タスク)で「本当にベースラインより速いか」を検証し、合格すれば承認(accept)してベースラインに昇格させる。

つまり「低コスト=即採用」ではなく、承認(accept)されて初めて使われるのが SPM の肝。

各誤答が違う理由
  • A自動で即切り替え&上書きはしない。それでは plan regression を防げず SPM の意味がない。承認プロセスが必須。
  • C新計画は破棄されず、未承認としてプラン履歴に追加される(後で evolve できる)。記録されないは誤り。
  • D新索引が永久に使えないわけではない。evolve して承認すれば、索引を使う新計画もベースラインに入って使われる。DROP するしかない、は誤り。
ひっかけ: 「オプティマイザは常に最小コスト計画を選ぶ」という基本則が、ベースラインがあると上書きされる点。 ベースライン下では“承認済みの中で”最小コストを選ぶのであり、未承認の新計画はコストが低くても使われない。安定性を取るための意図的な振る舞い。
Gold 保有者による書き下ろし解説・実機で検証済
この分野をもっと解いて、得点源に
SQL Plan Baseline を含む全問を分野別に演習できます(無料)。
演習する →