v$session 中查找locking信息

原创 2012年03月25日 18:07:57

现象:
系统突然报连接数过高,基本的现象就是有什么东西被锁了,导致后续的连接都在等待,那么到底是那个会话导致了阻塞那?
可以查看视图v$session ,关注以下几个字段
sid-------------------------被阻塞的进程id
status--------------------被阻塞的进程状态
COMMAND--------------被阻塞的进程执行的命令
ROW_WAIT_FILE#----被阻塞的进程对应的rowid所在的数据文件id
row_wait_block#-----row_wait_row#对应的rowid所在的表的object id
row_wait_obj#-------row_wait_row#对应的rowid所在的表的object id
row_wait_row#-----Current row being locked. This column is valid only if the session is currently waiting for another transaction to commit and the value of ROW_WAIT_OBJ# is not -1.但是准确的说是对应的于rowid的rownum,并非是单纯的rownum
blocking_session -----阻塞进程id
STATE-------------------被阻塞进程的状态
EVENT#----------------被阻塞进程等待的事件号
EVENT------------------被阻塞进程等待的事件
-----注意create_time是程序自动添加的
select t.sid,t.status,t.COMMAND,t.ROW_WAIT_FILE#,t.row_wait_block#,t.row_wait_obj#,t.row_wait_row#,t.blocking_session ,t.STATE,t.EVENT#,t.EVENT from temp_session t where t.BLOCKING_SESSION_STATUS='VALID' and t.create_time=to_date('2012/3/20 18:47:16','yyyy/mm/dd hh24:mi:ss');

    SID STATUS COMMAND ROW_WAIT_FILE# ROW_WAIT_BLOCK# ROW_WAIT_OBJ# ROW_WAIT_ROW# BLOCKING_SESSION STATE EVENT# EVENT
175 620 ACTIVE 3 8 571147 77418 17 885 WAITING 239 enq: TX - row lock contention
174 616 ACTIVE 3 8 571147 77418 17 885 WAITING 239 enq: TX - row lock contention
173 615 ACTIVE 3 8 571147 77418 17 885 WAITING 239 enq: TX - row lock contention
333 1050 ACTIVE 3 8 571147 77418 17 885 WAITING 239 enq: TX - row lock contention
179 632 ACTIVE 3 8 571147 77418 17 885 WAITING 239 enq: TX - row lock contention
178 629 ACTIVE 3 8 571147 77418 17 885 WAITING 239 enq: TX - row lock contention
332 1049 ACTIVE 3 8 571147 77418 17 885 WAITING 239 enq: TX - row lock contention
171 610 ACTIVE 3 8 571147 77418 17 885 WAITING 239 enq: TX - row lock contention
166 592 ACTIVE 3 8 571147 77418 17 885 WAITING 239 enq: TX - row lock contention
165 591 ACTIVE 3 8 571147 77418 17 885 WAITING 239 enq: TX - row lock contention
164 589 ACTIVE 3 8 571147 77418 17 885 WAITING 239 enq: TX - row lock contention

现在可以看到885进程阻塞了好多进程,那么要获得到底是那条记录被锁定了那?

想要知道某一个表具体被锁定的是哪一行,可以利用上面这几个值,查找出被锁定行的rowid。
使用dbms_rowidb包的一个子过程(Subprograms)rowid_create
DBMS_ROWID.ROWID_CREATE (
   rowid_type    IN NUMBER,
   object_number IN NUMBER,
   relative_fno IN NUMBER,
   block_number IN NUMBER,
   row_number    IN NUMBER)
RETURN ROWID;
其中rowid_type的取值为 0 表示生成一个restricted ROWID(pre-oracle8 format); 取值为1 表示生成一个extended ROWID.
object_number取值是dba_objects视图中的data_object_id,并不是object_id,也就是说不能用row_wait_obj#.
relative_fno取值是Relative文件号,在dba_data_files里可以查到
block_number取值是数据文件的块号,也就是v$session中的row_wait_block#的值
row_number通过rowid对应出来的rownum,也就是row_wait_row#的值。

接下来找到这些数据
rowid_type=1(11g)
object_number
select data_object_id from dba_objects where object_id='77418' 
OBJECT_IDTT_BIGINT NOT NULLDictionary object number of the object.
DATA_OBJECT_IDTT_BIGINTIs ignored.----这是11g的文档说明,可以看出,使用object_id就可以
relative_fno=8
block_number=row_wait_block#
row_number   =row_wait_row#

select * from  table_name t where rowid=(
select DBMS_ROWID.ROWID_CREATE(1,77418,8,571147,17) from dual);---得到被锁定的记录;

此时查看885进程在做神马?
kill之就可以

v$process v$sesson 通过会话号查找进程号 查看会话信息

--进程视图 v$process --会话视图 v$session  v$mystat v$sql  v$transaction v$lock  v$process.addr = v$session...
  • u011631923
  • u011631923
  • 2013年11月27日 23:00
  • 2369

v$session/v$process视图涉及的相关会话信息的查询

关于服务器进程与用户进程概念及v$session/V$PROCESS视图简介 ,详见:http://blog.csdn.net/q947817003/article/details/16922457 ...
  • q947817003
  • q947817003
  • 2013年11月24日 21:03
  • 2402

Linux中显示系统中USB信息的lsusb命令

来源:Linux中国  原文:https://linux.cn/article-2448-1.html 通用串行总线(USB)被设计成为连接计算机外设的标准,如键盘、...
  • robertsong2004
  • robertsong2004
  • 2015年06月24日 11:13
  • 4287

【client_ip】通过v$session查询客户端的IP信息

【client_ip】通过v$session查询客户端的IP信息 2014-02-26 09:27:56      0 个评论    来源:【client_ip】通过v$session查...
  • lawn
  • lawn
  • 2017年08月01日 15:18
  • 197

v$session/v$process视图涉及的相关会话信息的查询

关于服务器进程与用户进程概念及v$session/V$PROCESS视图简介 ,详见:http://blog.csdn.net/q947817003/article/details/16922457 ...
  • flawless_521
  • flawless_521
  • 2014年04月04日 15:46
  • 327

Oracle中V$session及session相关信息

V$session参数 SADDR: session address SID: session identifier,常用于连接其它列。 SERIAL#: sid 会重用,但是同一个sid被重用...
  • john2522
  • john2522
  • 2012年09月12日 15:50
  • 13101

ASP.NET保存信息总结(Application,Session,Cookie,ViewState和Cache等)

  • 2010年09月08日 09:51
  • 173KB
  • 下载

oracle官方文档之V$SESSION

V$SESSION V$SESSION displays session information for each current session. Column Datatyp...
  • m0_37373806
  • m0_37373806
  • 2017年03月18日 10:05
  • 193

动态执行表不可访问, 本会话的自动统计被禁止。在执行菜单里你可以禁止统计, 或在v$session

动态执行表不可访问, 本会话的自动统计被禁止。 在创建表空间时,跳出  动态执行表不可访问, 本会话的自动统计被禁止。在执行菜单里你可以禁止统计, 或在v$session, oracl...
  • RiceToLife
  • RiceToLife
  • 2016年07月08日 09:28
  • 1306

30.Oracle杂记——Oracle常用动态视图v$session

30.Oracle杂记——Oracle常用动态视图v$session 视图v$session:有关会话的信息   这个视图包含了超级多的列,说明其包含巨大的信息,小伙伴千万要记得使用,不然浪费掉...
  • notbaron
  • notbaron
  • 2017年10月30日 22:37
  • 257
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:v$session 中查找locking信息
举报原因:
原因补充:

(最多只允许输入30个字)