A partir de oracle 19c, se ha introcido una nueva funcionalidad en el paquete DBMS_XPLAN, es la posibilidad de comparar planes de ejecución desde distintas fuentes.
En mi caso, el cliente tiene licencia de tuning & diagnostic pack, por lo que suelo usar frecuentemente las vistas del awr para ver la evolución de los planes de ejecución o directamente localizar los planes que cambien
Así teniendo el sql_id y el plan_hash_value de cada uno el DBMS_XPLAN.COMPARE_PLANS nos los compara y nos saca el informe.
--sql_compare_plans_awr.sql
--sysassysdba@gmail.com orarman.blogger.com
set echo off
set verify off
set feedback off
set linesize 300
SET PAGESIZE 500
UNDEFINE PLHASHCOMP
UNDEFINE PLHASHREF
UNDEFINE SQL_ID
ACCEPT SQLID PROMPT 'SQLID TO compare --> '
ACCEPT PLHASHREF PROMPT 'PLAN_HASH_VALUE OF REFERENCCE PLAN --> '
ACCEPT PLHASHCOMP PROMPT 'PLAN_HASH_VALUE OF COMPARE PLAN --> '
spool LOGS/compare_sql_'&sqlid'_hashs_'&PLHASHREF'_vs_'&PLHASHCOMP'.txt
VARIABLE v_rep CLOB
BEGIN
:v_rep := DBMS_XPLAN.COMPARE_PLANS(
reference_plan => awr_object('&sqlid', null, null, &PLHASHREF),
compare_plan_list => plan_object_list(awr_object('&sqlid', null, null, &PLHASHCOMP)),
type => 'TEXT',
level => 'ALL',
section => 'ALL');
END;
/
set long 100000
COLUMN report FORMAT a250
SELECT :v_rep REPORT FROM DUAL;
spool off
UNDEFINE PLHASHCOMP
UNDEFINE PLHASHREF
UNDEFINE SQL_ID
set feedback on
set verify on
set echo on