SQLチューニング(3) --- ストアドアウトライン

  • ストアドアウトラインを使用する目的
    • プランスタビリティ(実行計画の安定化)
    • 次のような環境変化があっても、CBOが算出する実行計画を変えないようにする
      • Oracleバージョン
      • 統計再収集
      • 初期化パラメータの変更
      • データベース再編成
      • スキーマの変更
    • アプリケーションにコードが埋め込まれていたりして、ヒントを追加できないときなどに有効
  • ストアドアウトラインの作成
    • SQL単位またはすべてのSQL一括で設定
    • 管理単位はカテゴリ
    • 同じSQLの設定を複数のカテゴリに含めることができる
    • CREATE CATEGORY ... ON SQL
    • alter session|system set create_stored_outline = カテゴリ名|TRUE|FALSE
    • TRUEの場合はDEFAULTカテゴリが使用されるという謎の構文となっている
  • ストアドアウトラインの管理
    • OUTLNスキーマのOL$、OL$HINTSに情報が格納されている
    • でも見づらいので、実際にはDBA_OUTLINE、DBA_OUTLINE_HINTSビューを使用する
    • 管理操作にはOUTLN_PKGパッケージを使用
  • プライベートアウトラインの利用
    • 作成したセッションのみで有効なアウトライン
    • あらかじめDBMS_OUTLN_EDIT.CREATEEDI_TALBESプロシージャでプライベートアウトライン用テーブルを作成しておく
    • CREATE PRIVATE OUTLINE...で作成→編集→テスト
    • CREATE OR REPLACE OUTLINE...でパブリックに公開