SQL計画管理(SPM)

今日は勉強時間が短いので、短い範囲で。


SQL計画管理(SPM:SQL Plan Management)をお勉強。
範囲は短かったから1時間くらいで終わったけど、なんかメモは多いな・・・


SQL管理ベースラインのアーキテクチャ
(図の構成的に、DataPumpのアーキテクチャと違って、構成よりは利用される計画が決まる仕組みを覚えた方がテストには出そうな予感)
 ・SQL管理ベース(SMB:SQL Management Base)はデータディクショナリの一部で、SYSAUX表領域
 ・文のログ、計画履歴、計画ベースライン、SQLプロファイルはSMBの一部
 ・SMBには自動領域管理機能(未使用領域の定期消去)を持つ。保存ポリシー、領域サイズ制限が指定可能。
  ・未使用計画の保存期間はデフォルト53週(1年)
   ⇒dbms_spm.configure('plan_retention_weeks',523)で5週〜10年まで変更可⇒未使用期間が523週を超えたら消去
  ・領域サイズ制限のデフォルトはSYSAUXの10%
   ⇒dbms_spm.configure('space_budget_percent',50)で1%〜50%まで変更可⇒超えたら消すまで毎週アラートログ
  ・繰り返し可能なSQLは自動認識され、計画履歴が保持される。
  ・自動SQLチューニングタスクの計画は一旦計画履歴の一部(未承認計画)となるが、自動で検証される。優れていれば検証済み計画としてベースラインに含まれる。
オプティマイザによって、自動的にSQL計画ベースラインが管理される。
★計画ベースラインは自動取得、もしくはカーソルキャッシュ、STSSQL Tuning Set)から手動ロードできる。
 ★自動取得を有効にするには、【OPTIMIZER_CAPTURE_SQL_PLANBASELINE 初期化パラメータ】をTRUEにする。デフォルトはFALSE。⇒TRUEにすると、繰り返し可能なSQLの自動認識と、計画履歴の自動作成が有効になる。
 ★【DBMS_SPMパッケージ】を利用して、手動ロードを行う。
オプティマイザによって自動生成された計画は、検証されるまで使用されない。計画履歴の一部となる。
SQL計画ベースラインの展開は2通り。
 ・DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE関数を利用。
 ・SQLチューニングアドバイザ(STA)を実行する。手動、またはSTAでSQL文をチューニングし、SQLプロファイルを承認する。
★検証済みの、ベースラインに含まれる計画のみが利用される。
 ★ENABLEDのみが検証される。
 ★ACCEPTEDは承認済み。
 ⇒計画ベースラインの計画はENABLED, ACCEPTED
 ★FIXED(固定計画)があると、他の計画はFIXEDに変更されるまで無視される。
 ★FIXEDが複数ある場合はそれらの中で優れた計画が使用される。
★計画の変更が自動的に検証される。⇒同等または優れた計画が継続的に使用される。
SQLパフォーマンスアナライザのSTSを利用してクリティカルなSQLを予め識別できる。
 ○計画の検証は、メンテナンスウィンドウの自動SQLチューニングタスクの一部として、追加設定なしで実行される。
 ★自動SQLチューニングタスクは、負荷の高いSQLのみを対象とする。
 ★自動で検証の行われた計画は承認済となり、SQL計画ベースラインの一部となる。
○バージョンアップ時にはワークロードの計画をSTSに取得しておく。移行後、発生する計画の退行を最小限にすることができる。
SQL計画は長期間展開すると、より優れたものとなる(と言い切って良いらしい)。
○EMからSQLプロファイル、SQLパッチ、SQL計画ベースラインを設定、管理可能。
×SYSAUX表領域がオフラインの場合利用不可。