oracle查找当前比较消耗资源的session

可以通过v$session 看到当前session信息,可以从v$sesstat中看到session的状态。通过和v$statname进行联合查询,就可以得到当前session的获得资源的信息:

1.找到当前所有session IO信息
select ses.username,ses.sid,ses.status,
   max(decode(sta.name,'session logical reads',sest.value)) as "LOG IO",
   max(decode(sta.name,'physical reads',sest.value)) as "PHY IO",
   round(max(decode(sta.name,'session logical reads',sest.value))
        /(3600*24*(sysdate-ses.logon_time)),2) as "LOG IO/S",
   round(max(decode(sta.name,'physical reads',sest.value))
        /(3600*24*(sysdate-ses.logon_time)),2) as "PHY IO/S",
        trunc(60*24*(sysdate-ses.logon_time)) as "Minutes"
        from v$session ses,v$sesstat sest,v$statname sta
        where ses.sid=sest.sid and sest.statistic#=sta.statistic#
           and sta.name in ('session logical reads','physical reads')
           and ses.username is not null
   group by ses.username,ses.sid,ses.status,ses.logon_time
   order by 1,2


操作示例:



2.然后通过找到的sid,可以查看该session正在执行什么sql,以及sql的执行计划:

select sql_fulltext from v$sqlarea
  where (hash_value,address) =
         (select decode(sql_hash_value,0,prev_hash_value,sql_hash_value) as hash_value,
                decode(sql_hash_value,0,prev_sql_addr,sql_address) as sql_addr
                 from v$session where sid=&sid);
                 

操作示例:



SELECT operation, options, object_name, cost FROM v$sql_plan
   WHERE (hash_value,address)=
  (select decode(sql_hash_value,0,prev_hash_value,sql_hash_value) as hash_value,
       decode(sql_hash_value,0,prev_sql_addr,sql_address) as sql_addr
        from v$session where sid=&sid);


操作示例:




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值