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

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时间,语句运行的时间 

module, --当前执行模块调用者名称

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,比使图形化工具,要高效方便的多得多!



select longops.sid,longops.elapsed_seconds,longops.opname,sql.sql_text from v$session_longops longops , v$sql sql where longops.elapsed_seconds>6 and longops.sql_id=sql.sql_id;



select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value
from v$session a,v$process b,v$sesstat c
where c.statistic#=12 and c.sid=a.sid and a.paddr=b.addr order by value desc;



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值