DBAtlas · データベース運用アトラス

SQLプロファイルの受入れ、無効化、削除

Oracleパフォーマンス

コマンド

-- 1) Accept the profile recommended by the tuning task:
DECLARE
  l_name VARCHAR2(128);
BEGIN
  l_name := DBMS_SQLTUNE.ACCEPT_SQL_PROFILE(
              task_name   => '<task_name>',
              name        => 'PROF_<sql_id>',
              description => 'STA recommendation, CHG-1234',
              force_match => TRUE,     -- also matches statements differing only in literals
              replace     => TRUE);
  DBMS_OUTPUT.PUT_LINE('Profile: ' || l_name);
END;
/

-- 2) Profiles and the cursors using them:
SELECT name, category, status, force_matching,
       TO_CHAR(created,'YYYY-MM-DD HH24:MI') AS created
FROM   dba_sql_profiles
ORDER  BY created DESC;

SELECT sql_id, child_number, plan_hash_value, sql_profile
FROM   v$sql
WHERE  sql_profile IS NOT NULL;

-- 3) Temporarily disable / drop:
EXEC DBMS_SQLTUNE.ALTER_SQL_PROFILE(name => 'PROF_<sql_id>', attribute_name => 'STATUS', value => 'DISABLED');
EXEC DBMS_SQLTUNE.DROP_SQL_PROFILE(name => 'PROF_<sql_id>', ignore => TRUE);

概要

SQLプロファイルはオプティマイザに追加のカーディナリティ/選択性の補正(OPT_ESTIMATEなど)を与え、SQLテキストを変更せずにより良い計画を生成させる。FORCE_MATCHを指定すると、リテラルのみが異なる文にも適用される。

使用する場面

SQLを変更できないとき(パッケージアプリケーション)、STAが検証済みの改善を推奨したとき、計画劣化の迅速な修正として。

注意

Tuning Packライセンスが必要。プロファイルは計画を「固定」しない。見積りを補正するため、データ分布が変われば計画は変わり得る。計画の安定性が必須ならSQL計画ベースラインを使用する。両方が存在する場合、オプティマイザはベースラインの受入れ済み計画の中から選択する。受入れ前に必ず検証結果(レポートの'Validation results'セクション)を確認する。

DBAtlas で開く →

関連項目