Oracle SPM

Da Emigar.
Jump to navigation Jump to search

A differenza degli SQL Profile, non richiede licenza diagnostic e tuning. Utilizzabile sulla EE e dalla 18 anche sulla SE, sebbene con alcune limitazioni.

Forzare un piano

DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE (
  sql_id            IN  VARCHAR2,
  plan_hash_value   IN  NUMBER   := NULL,
  fixed             IN  VARCHAR2 := 'NO',
  enabled           IN  VARCHAR2 := 'YES')
RETURN PLS_INTEGER;

Esempio:

exec dbms_spm.load_plans_for_cursor_cache(sql_id=>'b05n0m9gmkj06',plan_hash_value=>23432123,fixed=>'YES',enabled=>'YES');



SQL Baseline Plan

Per forzare un piano di esecuzione trovato nella sql cursor cache, di cui si conosce l'hash value: Cerca il piano di esecuzione con:

--
set autotrace off
set pagesize 200
set linesize 200
select DBMS_LOB.substr(sql_fulltext, 3000) from v$sql where sql_id = '&1';
select * from table(DBMS_XPLAN.DISPLAY_CURSOR(sql_id=>'&1',cursor_child_no=>&2));

Trovato l'hash value, si può stabilizzare con:

--
declare
 my_plans pls_integer;
begin
 my_plans:=DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(SQL_ID=>'&1',PLAN_HASH_VALUE=>'&2',FIXED=>'YES',ENABLED=>'YES');
end;
/