Cargar un plan bueno desde el cursor cache como SQL plan baseline
OracleRendimientoComando
-- 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.Qué hace
Usa SQL Plan Management para convertir el plan elegido en un baseline ACCEPTED; a partir de entonces el optimizador usa solo planes aceptados del baseline y aparca los planes nuevos hasta que se evolucionen.
Cuándo usarlo
Para volver a un plan bueno conocido durante una regresión de plan, y para proteger los planes de SQL críticos antes de un upgrade o un cambio de estadísticas.
Precaución
Sin licencia adicional en Enterprise Edition (en SE2 está limitado a un plan de baseline por SQL). Requiere ADMINISTER SQL MANAGEMENT OBJECT. Un baseline se aplica exactamente al mismo texto SQL (firma); no ayuda a SQL que usa literales. Si se elimina un índice que usa el plan, este no se puede reproducir (REPRODUCED=NO) y el optimizador vuelve a la elección basada en costos. OPTIMIZER_USE_SQL_PLAN_BASELINES debe ser TRUE (por defecto).
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