DBAtlas · Atlas für Datenbankbetrieb

SQL-Profil akzeptieren, deaktivieren und löschen

OraclePerformance

Befehl

-- 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);

Was es tut

Ein SQL-Profil gibt dem Optimizer zusätzliche Korrekturen für Kardinalität/Selektivität (OPT_ESTIMATE u. Ä.), damit er ohne Änderung des SQL-Texts einen besseren Plan erzeugt; mit FORCE_MATCH gilt es auch für Anweisungen, die sich nur in Literalen unterscheiden.

Wann einsetzen

Wenn die SQL nicht geändert werden kann (Standardanwendung), wenn der STA eine validierte Verbesserung empfiehlt, oder als schnelle Lösung für eine Planregression.

Vorsicht

Erfordert die Tuning-Pack-Lizenz. Ein Profil "sperrt" den Plan nicht; es korrigiert Schätzungen, daher kann sich der Plan bei geänderter Datenverteilung trotzdem ändern. Ist Planstabilität Pflicht, nutze eine SQL Plan Baseline. Existieren beide, wählt der Optimizer unter den akzeptierten Plänen der Baseline. Lies vor dem Akzeptieren immer die Validierungsergebnisse (Abschnitt 'Validation results' im Report).

In DBAtlas öffnen →

Verwandte Einträge