查找运行时间比较长的SQL或PL/SQL

上一篇 / 下一篇  2008-03-05 14:00:37 / 个人分类:oracle

v$session中的last_call_et列表示从STATUS(状态)改变到当前的时间(单位是秒)。
也就是说,如果session当前是inactive的,则表示inactive的时间
如果session当前是active的,则表示active的时间。
另外需要注意的是last_call_et表示的是last call的时间。
对于单条SQL而言,是指sql执行时间;对于plsql而言,则是指整个plsql的执行时间。
后台进程一直是active的,因此后台进程的last_call_et与实例运行时间相近。
查找方法:
  先找出SID:select sid,username,last_call_et,status from v$session
             where status='ACTIVE' and username is not null
             order by last_call_et;
  再根据SID找出执行的SQL或PL/SQL:
   select sql_text from v$session a,v$sqltext_with_newlines b
   where DECODE(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash_value
   and a.sid=&1 order by piece;
附:查找空闲时间较长的连接:
select sid,serial#,username,machine,last_call_et,status from v$session 
where status='INACTIVE' and username is not null         
order by last_call_et; 
如果为了减小资源占用,可以将长时间空闲的连接kill掉。
 

TAG:

引用 删除 Guest   /   2008-07-16 17:12:37
5
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2009-01-09  
    123
45678910
11121314151617
18192021222324
25262728293031

数据统计

  • 访问量: 3575
  • 日志数: 68
  • 建立时间: 2007-12-19
  • 更新时间: 2009-01-09

RSS订阅

Open Toolbar