código

sábado, 20 de diciembre de 2025

Comprar planes de ejecución en el AWR

 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



jueves, 18 de diciembre de 2025

Oracle Cloud control diferencias entre Espacio Disponible Usado (%) y Espacio Asignado Usado (%)

 Hoy ha venido un compañero con una duda sobre el espacio ocupado por los tablespaces en cloud control







El tablespace DATAMART_TBS_D muestra una diferencia immensa entre la columna "Espacio Disponible Usado (%) y la columa "Espacio Asignado Usado (%)".  

En un principio podríamos pensar que es debido a las extensiones asignadas y no llenas totalmente de los segmentos, que prodría ser fragmentación. Pero analizando los resultados del segment advisor sobre todos los objetos del tablespace, vemos que no hay una ganancia significativa desfragmentando tablas ni recostruyendo índices.

Por otro lado, al ver la dba_objects veo que todos los segmentos del tablespace tienen fecha de la pasada noche, eso me lleva pensar en la recycle bin, y efectivamente, ahí están todos los segmentos que están consumiendo el Espacio Asignado Usado pero que no consumen Espacio Disponible Usado.


La solución purgar la recycle bin, en este caso para todos los usuarios.


purge dba_recyclebin;



Y despues de encontrar que es un proceso de refresco casi diario, he optado por deshabilitar la recycle bin que viene habilitada por defecto:

alter system set recyclebin=off scope=spfile sid='*';

El parámetro es estático por lo que tendremos que esperar a un reinicio de la base de datos para que surja efecto.