SQL-Profil akzeptieren, deaktivieren und löschen
OraclePerformanceBefehl
-- 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).
Verwandte Einträge
- AWR-Snapshot erstellen und AWR-Report zwischen zwei Snapshots erzeugen
- AWR-Diff-Report (Compare Period) zwischen zwei Zeiträumen
- Top Wait Events und Top-SQL der letzten Minuten aus ASH
- ADDM-Analyse ausführen und Report abrufen
- SQL-Monitor-Report abrufen (laufende oder abgeschlossene lange SQL)
- 10046-Trace für eine Session aktivieren/deaktivieren und mit TKPROF zusammenfassen