您的位置:首页 > 数据库

通过v$sqlarea和v$sql视图查找比较耗费资源的sql

2012-07-17 11:46 417 查看
1.从v$sqlarea中找出最多的物理读的sql
select b.username,
a.DISK_READS,
a.EXECUTIONS,
a.DISK_READS / decode(a.EXECUTIONS, 0, 1, a.EXECUTIONS) ratio,
a.SQL_TEXT
from v$sqlarea a, dba_users b
where a.PARSING_USER_ID = b.user_id
and a.DISK_READS > 10000
and b.username not in ('SYS', 'SYSTEM')
order by a.DISK_READS desc;


2.从v$sqlarea中找出最多的逻辑读的sql
select b.username,
a.BUFFER_GETS,
a.EXECUTIONS,
a.BUFFER_GETS / decode(a.EXECUTIONS, 0, 1, a.EXECUTIONS) ratio,
a.SQL_TEXT
from v$sqlarea a, dba_users b
where a.PARSING_USER_ID = b.user_id
and a.BUFFER_GETS > 10000
and b.username not in ('SYS', 'SYSTEM')
order by a.DISK_READS desc;


3.从v$sql中选出最占用资源的sql
select *
from (select a.ADDRESS,
a.SQL_TEXT,
rank() over(order by a.BUFFER_GETS desc) as rank_bufgets,
to_char(100 * ratio_to_report(a.BUFFER_GETS) over(), '999.99') as pct_bufgets
from v$sql a
where a.PARSING_SCHEMA_NAME = 'PMIS')
where rank_bufgets < 11


4.在第3个sql中可能存在sqltext是一样的,但是是不同的子cursor的语句,那么可以查询v$sql_shared_cursor来查询为什么同一个sqltext的sql会有不同的执行计划
select * from v$sql_shared_cursor c where c.ADDRESS='&address'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: