oracle查找全表扫描的sql

教程发布:风哥 教程分类:ITPUX技术网 更新日期:2022-02-12 浏览学习:259

今天因客户需要,需要查找出全表扫描的有哪些sql,并且哪些是小表,如果有可能cache在内存中,减少从硬盘读的次数

select to_char(sysdate, 'yyyymm') as tjyf,
a.object_owner,
a.object_name,
c.BYTES / 1024 / 1024,
sum(b.EXECUTIONS)
from (select object_owner, object_name, HASH_VALUE
from v$sql_plan
where object_owner not in ('SYS',
'SYSTEM',
'DBSNMP',
'OUTLN',
'PERFSTAT',
'PUBLIC',
'SQLAB',
'WMSYS')
and ptions = 'FULL'
group by object_owner, object_name, HASH_VALUE) a,
v$sqlarea b,
dba_segments c
where a.HASH_VALUE = b.HASH_VALUE
and a.OBJECT_OWNER = c.owner
and a.object_name = c.segment_name
and c.segment_type = 'TABLE'
group by to_char(sysdate, 'yyyymm'),
a.object_owner,
a.object_name,
c.BYTES / 1024 / 1024
order by sum(b.EXECUTIONS);

我们就可以根据以上sql来做进一步的选择了,比如buffer区的2%以下为小表,和执行次数大于多少以上。

本文标签:
网站声明:本文由风哥整理发布,转载请保留此段声明,本站所有内容将不对其使用后果做任何承诺,请读者谨慎使用!
【上一篇】
【下一篇】