Зафиксировать, отключить или удалить план SQL plan baseline
OracleПроизводительностьКоманда
-- Show the plan content:
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE(
sql_handle => '<sql_handle>',
plan_name => '<plan_name>',
format => 'TYPICAL'));
SET SERVEROUTPUT ON
DECLARE
n PLS_INTEGER;
BEGIN
-- FIXED: this plan is preferred, new plans are not evolved automatically
n := DBMS_SPM.ALTER_SQL_PLAN_BASELINE(
sql_handle => '<sql_handle>', plan_name => '<plan_name>',
attribute_name => 'fixed', attribute_value => 'YES');
-- Take the bad plan out of use (without dropping it):
n := DBMS_SPM.ALTER_SQL_PLAN_BASELINE(
sql_handle => '<sql_handle>', plan_name => '<bad_plan_name>',
attribute_name => 'enabled', attribute_value => 'NO');
END;
/
-- Drop one plan or the SQL's entire baseline:
DECLARE
n PLS_INTEGER;
BEGIN
n := DBMS_SPM.DROP_SQL_PLAN_BASELINE(sql_handle => '<sql_handle>', plan_name => '<plan_name>');
-- without plan_name, all plans of the SQL are dropped:
-- n := DBMS_SPM.DROP_SQL_PLAN_BASELINE(sql_handle => '<sql_handle>');
DBMS_OUTPUT.PUT_LINE(n || ' plan(s) dropped');
END;
/Что делает
Управляет атрибутами планов baseline: план FIXED предпочитается другим принятым планам и останавливает автоматическую эволюцию новых планов; ENABLED=NO отключает план без удаления; DROP удаляет его безвозвратно.
Когда использовать
Чтобы жёстко закрепить план для критичного SQL, отключить ошибочно принятый плохой план или очистить ненужные baseline.
Внимание
Требует Enterprise Edition. Планы FIXED могут деградировать по мере роста данных и мешают оптимизатору использовать лучший план; периодически пересматривайте их. SQL, у которого все планы ENABLED=NO, оптимизируется свободно. DROP необратим; сначала сохраните копию в staging-таблицу через DBMS_SPM.PACK_STGTAB_BASELINE.
Связанные материалы
- Сделать снимок AWR и сформировать отчёт AWR между двумя снимками
- Отчёт AWR diff (compare period) между двумя периодами
- Топ wait events и топ SQL из ASH за последние минуты
- Выполнить анализ ADDM и получить отчёт
- Получить отчёт SQL Monitor (выполняющийся или завершённый долгий SQL)
- Включить/выключить трассировку 10046 для сессии и обобщить её через TKPROF