Oracle中获取最低效的 topSQL的语句

转载自:http://www.tsingsong.com/jforum/posts/list/213.page

oracle提供了很多工具来查找最低效的SQL,但是,本质上就是通过如下SQL语句,从相关系统视图中获取最低效的SQL: 


select rownum as rank, a.* 
from (select PARSING_SCHEMA_NAME RUN_USER, --执行用户 
SQL_FULLTEXT, --SQL文本,全,带格式 
sql_text, --SQL文本前面部分 
elapsed_Time , --单位是微秒,语句执行完的总时间,包括CPU时间和等待时间 
cpu_time , --CPU时间,语句运行的时间 
elapsed_Time - cpu_time wait_time, 
trunc((elapsed_Time - cpu_time)*100/elapsed_Time,2) "wait_time_per%",--等待时间所占百分比 
executions, --执行次数 
elapsed_Time/(executions+1) Per_Time, --每次执行平均时间, 
buffer_gets, -- 
disk_reads, --磁盘读 
hash_value, --SQL的hash_value,以备获取完整SQL 
USER_IO_WAIT_TIME, 
SORTS --排序次数 
from v$sqlarea t 
where elapsed_time > 20000 and PARSING_SCHEMA_NAME<>'SYS' 
order by elapsed_time desc) a 
where rownum < 21 
order by elapsed_time desc 

Responsce time = service time + wait time 
一个操作的响应时间 = 必要的服务(计算)时间 + 各种等待时间 

而在V$SQL中 
elapsed_time 代表了执行完毕的时间 , 也就是响应时间,response time, 
而cpu_time 代表了执行时消耗的CPU 时间,也就是计算时间,服务时间,service time 

所以 
elapsed_time = cpu_time + wait_time 
有时候可以通过这两个值的差来衡量这个SQL的wait Time. 
当然,有时候可能关心elapsed_time ,有时候则关心cpu_time ,也有时候关心wait Time,取决于实际需求。 

这个SQL,务必保存,掌握这些SQL,比使图形化工具,要高效方便的多得多!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值