Evolucionar planes no aceptados de un SQL plan baseline
OracleRendimientoComando
-- 1) Plans waiting for acceptance:
SELECT sql_handle, plan_name, origin, enabled, accepted, fixed,
TO_CHAR(created,'YYYY-MM-DD HH24:MI') AS created
FROM dba_sql_plan_baselines
WHERE accepted = 'NO'
ORDER BY created DESC;
-- 2) Evolve task: test-executes the candidate plan against the accepted plan
VAR tname VARCHAR2(128)
VAR ename VARCHAR2(128)
BEGIN
:tname := DBMS_SPM.CREATE_EVOLVE_TASK(
sql_handle => '<sql_handle>',
time_limit => 600,
task_name => 'EVOLVE_<sql_handle>');
:ename := DBMS_SPM.EXECUTE_EVOLVE_TASK(task_name => :tname);
END;
/
SET LONG 1000000 LONGCHUNKSIZE 1000000 LINESIZE 200 PAGESIZE 0
SELECT DBMS_SPM.REPORT_EVOLVE_TASK(
task_name => :tname, execution_name => :ename,
type => 'TEXT', level => 'TYPICAL', section => 'ALL')
FROM dual;
-- 3) If the report has recommendations (plans proven better), accept them:
SET SERVEROUTPUT ON
DECLARE
n PLS_INTEGER;
BEGIN
n := DBMS_SPM.IMPLEMENT_EVOLVE_TASK(task_name => :tname);
DBMS_OUTPUT.PUT_LINE(n || ' plan(s) accepted');
END;
/
EXEC DBMS_SPM.DROP_EVOLVE_TASK(task_name => :tname);Qué hace
Cuando existe un baseline, los planes nuevos que encuentra el optimizador se guardan con ACCEPTED=NO. La tarea de evolve ejecuta en prueba estos candidatos frente al plan aceptado y acepta solo los que son claramente mejores.
Cuándo usarlo
Para SQL con baseline cuando un índice nuevo o estadísticas nuevas pueden haber producido un plan mejor; para decidir manualmente sin esperar a la SYS_AUTO_SPM_EVOLVE_TASK automática (12c+).
Precaución
Requiere Enterprise Edition. El evolve ejecuta realmente el SQL (solo la parte de consulta en DML); defina time_limit para SQL pesados y evite las horas pico. Requiere ADMINISTER SQL MANAGEMENT OBJECT y ADVISOR. Los SQL parseados como SYS no se pueden evolucionar (ORA-16963); ejecútelo como el usuario de la aplicación.
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