1

以下查询输出过去 7 天对表的总逻辑读取:

SELECT owner as schema, object_name AS table_name,
     sum(logical_reads_delta) AS total_logical_reads
FROM dba_hist_seg_stat a, dba_hist_seg_stat_obj b
WHERE     owner != 'SYS'
     and owner!= 'SYSTEM'
     AND a.obj# = b.obj#
     AND a.dataobj# = b.dataobj#
     AND object_type = 'TABLE'
GROUP BY owner, object_name
order by sum(logical_reads_delta) desc;

如果它不在输出中,则它没有逻辑读取。

我实际上正在寻找一种方法将数据库中的所有表(即使是没有逻辑读取的表)与上述输出连接起来。外联?

结果有望成为数据库上最近活动的列表,其中列出了所有具有逻辑读取的表(以及一些具有空值的表)

想法如何做到这一点?

4

1 回答 1

1

我不确定我是否误解了这个问题,但这个查询会以某种方式解决您的问题吗?

我已将您的查询链接到DBA_TABLES(使用外连接),因此它可以检索数据库中所有可用的表,其中列出了首先具有逻辑读取的表。

SELECT t.owner AS schema_name,
       t.table_name,
       q.total_logical_reads
  FROM dba_tables t
  LEFT JOIN
      (SELECT b.owner AS schema,
              b.object_name AS table_name,
              SUM (a.logical_reads_delta) AS total_logical_reads
         FROM dba_hist_seg_stat a
         JOIN dba_hist_seg_stat_obj b USING (obj#, dataobj#)
        WHERE b.owner NOT IN ('SYS', 'SYSTEM')
          AND b.object_type = 'TABLE'
        GROUP BY b.owner, b.object_name) q
   ON (t.owner = q.schema AND t.table_name = q.table_name)
ORDER BY q.total_logical_reads DESC NULLS LAST;

嗬它有帮助...

于 2012-06-29T08:47:34.533 回答