Guten Plan aus dem Cursor Cache als SQL Plan Baseline laden
OraclePerformanceBefehl
-- 1) Compare the SQL's plans and their performance:
SELECT sql_id, child_number, plan_hash_value, executions,
ROUND(elapsed_time/1e3/NULLIF(executions,0),1) AS ms_per_exec,
sql_plan_baseline
FROM v$sql
WHERE sql_id = '<sql_id>';
-- 2) Load the chosen plan as a baseline:
SET SERVEROUTPUT ON
DECLARE
n PLS_INTEGER;
BEGIN
n := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(
sql_id => '<sql_id>',
plan_hash_value => <plan_hash_value>,
fixed => 'NO',
enabled => 'YES');
DBMS_OUTPUT.PUT_LINE(n || ' plan(s) loaded');
END;
/
-- 3) Verify the baseline:
SELECT sql_handle, plan_name, origin, enabled, accepted, fixed, reproduced,
TO_CHAR(last_executed,'YYYY-MM-DD HH24:MI') AS last_exec
FROM dba_sql_plan_baselines
WHERE signature = (SELECT exact_matching_signature FROM v$sql
WHERE sql_id = '<sql_id>' AND ROWNUM = 1);
-- On subsequent executions v$sql.sql_plan_baseline should be populated.Was es tut
Macht den gewählten Plan per SQL Plan Management zu einer ACCEPTED-Baseline; der Optimizer verwendet dann nur akzeptierte Baseline-Pläne und stellt neu gefundene Pläne zurück, bis sie evolviert sind.
Wann einsetzen
Um bei einer Planregression zu einem bekannt guten Plan zurückzukehren und um Pläne kritischer SQL vor einem Upgrade oder einer Statistikänderung zu schützen.
Vorsicht
Keine Zusatzlizenz in der Enterprise Edition (in SE2 auf einen Baseline-Plan je SQL beschränkt). Erfordert ADMINISTER SQL MANAGEMENT OBJECT. Eine Baseline gilt für exakt denselben SQL-Text (Signatur); bei SQL mit Literalen hilft sie nicht. Wird ein vom Plan verwendeter Index gelöscht, lässt sich der Plan nicht reproduzieren (REPRODUCED=NO) und der Optimizer fällt auf die kostenbasierte Wahl zurück. OPTIMIZER_USE_SQL_PLAN_BASELINES muss TRUE sein (Standard).
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