只是想知道有没有办法列出数据库中尚未查询的所有对象。 我知道你可以通过sys.dba_Objects看到last_ddl_time和Created Time。但我对对象特别是索引和表格的Total_reads更感兴趣。谁使用过它。(不是所有者)
感谢
答案 0 :(得分:2)
您可以使用V$SEGMENT_STATISTICS
视图来获取您所追踪的信息。例如,如果您想查看自上次数据库重新启动以来SCOTT
模式中每个段上已完成的逻辑读取次数
SQL> select owner, object_name, value
2 from v$segment_statistics
3 where statistic_name = 'logical reads'
4 and owner = 'SCOTT';
OWNER OBJECT_NAME VALUE
------------------------------ ------------------------------ ----------
SCOTT STATS_TEST 448
SCOTT BIN$bQrMO1+dTOOh9S8K9O+z+Q==$0 0
SCOTT COUNTER_TEST 1760
SCOTT BIN$763dsleISbi+AfEp20EN7A==$0 80
SCOTT TEST_TABLE 5424
SCOTT BIN$5QAh3TmjRWqeMKof7tY93g==$0 144
SCOTT BIN$1i4uV7CbQL2Pl0tANHsJQw==$0 80
SCOTT BIN$8ydZ/jHySAeudojTmTtByQ==$0 48
SCOTT FOO_TEMP 112
SCOTT ERR$_FOO 64
SCOTT EVENT 32
SCOTT FOO 32
SCOTT T1 176
SCOTT T2 80
SCOTT EMP 32
SCOTT GRAD_STUDENT_TB 240
SCOTT SYS_C0024557 64
SCOTT PK_EMP 0
18 rows selected.
如果您获得使用AWR的许可并且您的AWR保留时间足够长并且您可以使用较少的可用统计信息进行到期,并且您只对最常用的段感兴趣,那么您也可以使用{{1表。
DBA_HIST_SEG_STAT
但是,如果您试图找出某个特定对象是否被轻易使用,那么AWR可能不是正确的解决方案,因为尽管偶尔使用它,它可能不会显示为任何快照窗口中的顶部片段之一。
或者,您可以编写自己的进程以定期从SQL> ed
Wrote file afiedt.buf
1 select snap.begin_interval_time,
2 stat.logical_reads_delta,
3 obj.object_name
4 from dba_hist_seg_stat stat
5 join dba_hist_snapshot snap using (snap_id)
6 join dba_objects obj on (obj.object_id = stat.obj#)
7* where obj.owner = 'SCOTT'
SQL> /
BEGIN_INTERVAL_TIME LOGICAL_READS_DELTA OBJECT_NAME
------------------------------ ------------------- --------------------
16-AUG-11 04.00.11.428 PM 160 T1
18-AUG-11 12.00.13.856 PM 144 GRAD_STUDENT_TB
18-AUG-11 12.00.13.856 PM 48 SYS_C0024557
20-AUG-11 03.00.59.376 PM 144 LOAN_TXN
捕获数据,并通过从不同快照中减去统计值来计算增量。