DBA_TAB_MODIFICATIONSで前回統計情報取得からの更新状況が分かります
DBA_TAB_MODIFICATIONS/USER_TAB_MODIFICATIONSは前回統計情報取得後からテーブルへの変更がどのように行われたのか知る事ができます。ただしこのVIEWから取得できるのは「近似値」であると言う事がマニュアルにも記載されています。パフォーマンス上の理由から、DBA_TABLES.MONITORING=’YES’となっているテーブルが対象でかつ、実際のテーブルが更新された場合統計情報への繁栄に多少タイムラグがあるように、このVIEWへの繁栄もラグがあるようです。最新の情報に反映するにはFLUSH_DATABASE_MONITORING_INFOプロシージャを実行するとよいです。「このテーブルってどの程度更新入っているのかな?」と軽く調べる時活躍しています。
select
m.TABLE_OWNER
,m.TABLE_NAME
,t.last_analyzed "基準日"
,m.ins "基準日からのinsert件数"
,round(m.ins / to_number(sysdate - t.last_analyzed),2) "INSERT件数/日"
,m.upd "基準日からのupdate件数"
,round(m.upd / to_number(sysdate - t.last_analyzed),2) "UPDATE件数/日"
,m.del "基準日からのdelete件数"
,round(m.del / to_number(sysdate - t.last_analyzed),2) "DELETE件数/日"
from
dba_tables t inner join
(
select t.TABLE_OWNER,t.TABLE_NAME
,sum(t.INSERTS) ins
,sum(t.UPDATES) upd
,sum(t.DELETES) del
from dba_tab_modifications t
inner join dba_users u
on t.TABLE_OWNER = u.USERNAME and u.COMMON ='NO'
where not exists (
select 1 from dba_recyclebin b
where t.TABLE_NAME = b.OBJECT_NAME
and t.TABLE_OWNER = b.OWNER
and b.TYPE ='TABLE'
)
group by t.TABLE_OWNER,t.TABLE_NAME
) m
on t.TABLE_NAME = m.TABLE_NAME
and t.OWNER = m.TABLE_OWNER
where
t.last_analyzed is not null
order by 1,2
;


