10G V$SESSION

10G 中V$SESSION 的变化:
在一起,我们需要联合v$session和v$session_wait试图来查看某个session在等待事件。
SQL> SELECT s.sid, w.state, w.event, w.seconds_in_wait siw,
  2         s.sql_address, s.sql_hash_value hash_value, w.p1, w.p2, w.p3
  3  FROM   v$session s, v$session_wait w
  4  WHERE  s.sid = w.sid
  5  AND    s.sid = 154;

到了10G,主要查看V$SESSION就完全可以知道session在等待什么:
SQL> SELECT sid, state, event, seconds_in_wait siw,
  2         sql_address, sql_hash_value hash_value, p1, p2, p3
  3  FROM   v$session
  4  WHERE  sid = 154;

SID STATE   EVENT                   SIW SQL_ADDRESS      HASH_VALUE  P1   P2  P3
--- ------- ----------------------- --- ---------------- ---------- --- ---- ---
154 WAITING db file sequential read   1 000000038551E820 3625097388   4 9813   1
注意以上两个sql的字段是一样,但仅仅是对V$SESSION做了查询。

如果需要查看事务是否被BLOCKER,以前是需要联合V$SESSION和V$LOCK,
select
    (select username from v$session where sid=a.sid) blocker,
     a.sid,
    ' is blocking ',
     (select username from v$session where sid=b.sid) blockee,
         b.sid
from v$lock a, v$lock b
where a.block = 1
 and b.request > 0
 and a.id1 = b.id1
 and a.id2 = b.id2
到了10G,多了blocking_session 和 blocking_session_status字段,可以知道是否被阻塞。如果blocking_session_status字段是VALID,那一个有效的SID会出现在blocking_session 字段。
SQL>  select sid, sql_id,  PREV_SQL_ID , BLOCKING_SESSION_STATUS , BLOCKING_SESSION ,WAIT_CLASS_ID,SECONDS_IN_WAIT   ,WAIT_CLASS   from v$session  where
  2   username='KONG';

       SID SQL_ID        PREV_SQL_ID   BLOCKING_SESSION_STATUS           BLOCKING_SESSION WAIT_CLASS_ID SECONDS_IN_WAIT WAIT_CLASS
---------- ------------- ------------- --------------------------------- ---------------- ------------- --------------- ----------------------------------------------------------------
       290 0hcsvq77pq2a8 dyk4dprp70d74 VALID                                          300    4217450380             118 Application
       300               0hcsvq77pq2a8 NO HOLDER                                             2723168908             124 Idle
可以看到290 的进程被300的进程阻塞。

在以前如果想要查询某个session执行了那个sql语句,那需要用两个字段来查询: HASH_VALUE和ADDRESS。现在只有一个SQL_ID就可以了。
SQL> select  sql_text from v$sqltext st, v$session s
  2  where (st.sql_id = s.sql_id ) and s.sid=300;

SQL_TEXT
----------------------------------------------------------------
select count(*) from t2

生活简单就是美。

-THE END-

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/40239/viewspace-620890/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/40239/viewspace-620890/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值