2016/10/27(木)に開催された Oracle DBA & Developer Day 2016 で、
「オラクル・コンサルが語る! SQL性能を最大限に引き出すDB 12cクエリー・オプティマイザ 新機能活用と統計情報運用の戦略」
というお題で柴田歩さんと発表しました。
サマリ*1
- フィルタ条件・結合条件が多い集計クエリなど統計から正確なカーディナリティ見積が困難なケースに対応するためコストベースオプティマイザは継続的に進化してきた。
- ヒストグラムや拡張統計(列グループ統計・式統計)、ダイナミックサンプリングによる見積精度向上。
- カーディナリティフィードバックによる見積誤差補正。
- 12.1 では適応計画で実行中に実行計画補正、SQL計画ディレクティブでフィードバックが永続化されるようになった。
- これにより、カーディナリティフィードバックだけでは欠けていた(1回目は救えない、キャッシュアウトする)ミッシングピースが埋まった。
- 12.2 での変更点(適応計画のみデフォルトで有効)
- 以下は Oprimizer の Product Manager の Nigel Bayliss が OOW 2016 で発表したスライドからの引用です。
- 12.1 では適応計画とSQL計画ディレクティブはデフォルトで有効。
- 12.2 では OPTIMIZER_ADAPTIVE_FEATURES が廃止され、OPTIMIZER_ADAPTIVE_PLANS と OPTIMIZER_ADAPTIVE_STATISTICS に分割された。
- 12.2 ではデフォルトで OPTIMIZER_ADAPTIVE_PLANS のみ有効。
- 12.1 はデフォルトで最適化機能全開だったが、
- 12.2 では世の中でもっとも多い(だろう)タイプのシステムにデフォルトを合わせた。
- 12.2 では適したシステムは有効化して使ってくださいという方針になっている。
- 12.1 でもパッチ(Patch:22652097、Patch:21171382)で 12.2 の動作に変更することが可能。
参考
- Upgrading to Oracle Database 12c Without Pain And How Oracle Database 12c Release 2 Optimizer Features Will Help
- SQL Plan Directives The memory of the optimizer
- Oracle Database 12c Release 1 Performance(optimizer)
- より深く知るオプティマイザとそのチューニング
- Beyond EXPLAIN: Query Optimization From Theory To Code
- 問合せ最適化インサイド
過去のDDD資料
- 「Oracle DBA & Developer Days 2010」セッション資料 限定公開ページ | Oracle オラクルエンジニア通信 - 技術資料、マニュアル、セミナー Blog
- Oracle DBA & Developer Days 2011:セッション動画を一挙公開! | Oracle オラクルエンジニア通信 - 技術資料、マニュアル、セミナー Blog
- oracle dba & developer day 2012オンラインセミナー
- Oracle DBA & Developer Day 2013
- Oracle DBA & Developer Day 2014
- Oracle DBA & Developer Day 2015
私的備忘録
2016/10/24 AYU(柴田歩)さんと表参道の夜景をバックに最近オラクル青山センターにできた初カフェテリアで打合せ。DBのプロダクトマネジャーのMariaとディスカッションできて有意義だった。自分達の考えてた方向性と同じだった。
複雑なクエリで統計からのカーディナリティ見積が困難なケースに対応してきた適応計画、ディレクティブ(動的統計、統計フィードバック、拡張統計)。12.2 でデフォルト false になった心。統計固定時のLOW_VALUE、HIGH_VALUE はデータ型の最小、最大に。など考えてた通りだった。ディレクティブからの拡張統計は単表のみという指摘は助かった。
*1:以下で紹介しているスライドは公開版資料に含まれないものがあります