Oracle stale stats
select a.owner, a.table_name, m.partition_name
, inserts, updates, deletes, m.timestamp
, a.num_rows table_rows, p.num_rows partition_rows, a.last_analyzed
, case when nvl(p.num_rows,a.num_rows) = 0 then 0 else round(nvl(inserts+ updates+ deletes,0)/nvl(p.num_rows,a.num_rows) *100) end pct_stale
, case when nvl(inserts+ updates+ deletes,0) > 1/dbms_stats.get_prefs('STALE_PERCENT') *nvl(p.num_rows,a.num_rows) then 'YES' else 'NO' end is_stale
from all_tables a
left outer join ALL_TAB_MODIFICATIONS m on m.table_owner = a.owner and a.table_name = m.table_name
left outer join all_tab_partitions p on p.table_owner = a.owner and p.table_name = a.table_name and p.partition_name = m.partition_name
where a.owner = '&OWNER.';
-- do tables have their own preferences?
select * from dba_tab_stat_prefs ;
-- the key defaults
select dbms_stats.get_prefs('ESTIMATE_PERCENT') ESTIMATE_PERCENT
, dbms_stats.get_prefs('STALE_PERCENT') STALE_PERCENT
, dbms_stats.get_prefs('METHOD_OPT') METHOD_OPT
, dbms_stats.get_prefs('GRANULARITY') GRANULARITY
, dbms_stats.get_prefs('WAIT_TIME_TO_UPDATE_STATS') WAIT_TIME_TO_UPDATE_STATS
from dual;
Comments
Post a Comment