Fijar, deshabilitar o eliminar un plan de un SQL plan baseline
OracleRendimientoComando
-- 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;
/Qué hace
Gestiona los atributos de los planes del baseline: un plan FIXED se prefiere frente a otros planes aceptados y detiene la evolución automática de planes nuevos; ENABLED=NO deshabilita un plan sin borrarlo; DROP lo elimina definitivamente.
Cuándo usarlo
Para fijar firmemente un plan de un SQL crítico, deshabilitar un plan malo aceptado por error, o limpiar baselines que ya no se necesitan.
Precaución
Requiere Enterprise Edition. Los planes FIXED pueden degradarse a medida que crecen los datos e impedir que el optimizador use un plan mejor; revíselos periódicamente. Un SQL cuyos planes son todos ENABLED=NO se optimiza libremente. DROP es irreversible; haga antes un backup en una tabla de staging con DBMS_SPM.PACK_STGTAB_BASELINE.
Relacionado
- Tomar un snapshot de AWR y generar un informe AWR entre dos snapshots
- Informe AWR diff (compare period) entre dos periodos
- Top wait events y top SQL desde ASH para los últimos minutos
- Ejecutar un análisis ADDM y obtener su informe
- Obtener un informe de SQL Monitor (SQL largo en ejecución o finalizado)
- Habilitar/deshabilitar el trace 10046 para una sesión y resumirlo con TKPROF