v$open_cursor


v$open_cursor

本视图列出session打开的所有cursors

当诊断系统资源占用时,它常被用于联接v$sqlarea和v$sql查询出特定SQL(高逻辑或物理I/O)。
然后,下一步就是找出源头。
在应用环境,基本都是同一类用户登陆到数据库(在V$SQLAREA中拥有相同的PARSING_USER_ID),而通过这个就可以找出它们的不同。
V$SQLAREA中的统计项在语句完全执行后被更新(并且从V$SESSION.SQL_HASH_VALUE中消失)。
因此,你不能直接找到 session除非语句被再次执行。
不过如果session的cursor仍然打开着,你可以通过v$open_cursor找出执行这个语句的 session。

V$OPEN_CURSOR中的连接列

Column                      View                               Joined Column(s)
HASH_VALUE, ADDRESS         V$SQLAREA, V$SQL, V$SQLTEXT        HASH_VALUE, ADDRESS
SID                         V$SESSION                          SID

示例:

1。找出执行某语句的session:

SQL> SELECT hash_value, buffer_gets, disk_reads FROM V$SQLAREA
WHERE disk_reads > 1000000 ORDER BY buffer_gets DESC;

HASH_VALUE BUFFER_GETS DISK_READS
---------- ----------- ----------
1514306888   177649108    3897402
478652562    63168944    2532721
360282550    14158750    2482065
3 rows selected.

SQL> SELECT sid FROM V$SESSION WHERE sql_hash_value = 1514306888 ;
no rows selected

--直接通过hash_value查找v$session,没有记录

SQL> SELECT sid FROM V$OPEN_CURSOR WHERE hash_Value = 1514306888 ;
SID
-----
1125
233
935
1693
531
5 rows selected.

--通过hash_value在v$open_cursor中查找sid(只有在session的cursor仍然打开的情况下才有可能找到)

2。列出拥有超过400个cursor的sessionID

SQL> SELECT sid, count(0) ct FROM v$open_cursor
GROUP BY sid HAVING COUNT(0) > 400 ORDER BY ct desc;

事实上,v$open_cursor是一个相当常用的视图,特别是web开发应用的时候。
仅通过它一个视图你就能分析出当前的连接情况,主要执行语句等。

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

转载于:http://blog.itpub.net/13177610/viewspace-689662/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值