锁与锁等待

Oracle锁等待详解

当一个表被update,insert 或者delete 操作
这个表被锁了,表的一个行,只能有一个tx锁。
如果锁不释放,如果其他session也再update 该行,则发生锁等待,在oltp系统里,session 就得不到释放,容易造成session 爆满的情况。

session A:

1724:22i:26 SQL> update jiebin.test2 set wner='JIEBINB' where wner='JIEBINA';
 
1 row updated
 
Executed in 0.125 seconds
 
1724:22i:45 SQL>

假如没有commit ,则表test2上的锁不释放。
ctime 为锁的时间。这个时间,是不断增加的。一个update 产生一个表级锁,和一个行级锁。

 

1724:27i:33 SQL> select * from v$Lock where sid=1820;
 
ADDR             KADDR                   SID TYPE        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
---------------- ---------------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
00000000D5263208 00000000D5263230       1820 TM       371074          0          3          0        307          0
00000000D79670C8 00000000D7967250       1820 TX       655398    8738251          6          0        307          0
 
2 rows selected
 
Executed in 0.593 seconds
 
1724:27i:51 SQL> /
 
ADDR             KADDR                   SID TYPE        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
---------------- ---------------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
00000000D5263208 00000000D5263230       1820 TM       371074          0          3          0        312          0
00000000D79670C8 00000000D7967250       1820 TX       655398    8738251          6          0        312          0
 
2 rows selected
 
Executed in 0.515 seconds


如果session  B正巧 也再更新该行记录
session B:
 
update test2 set wner='JIEBINA' where rownum<2;

则session B hang 住,再等待session A的锁释放。发生enq: TX - row lock contention等待事件。
当request>0时,ctime为锁等待的时间。


1724:32i:12 SQL> select * from v$Lock where sid=722;
 
ADDR             KADDR                   SID TYPE        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
---------------- ---------------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
00000000DFA18358 00000000DFA18378        722 TX       655398    8738251          0          6        113          0
00000000D5263308 00000000D5263330        722 TM       371074          0          3          0        113          0
 
2 rows selected
 
Executed in 0.172 seconds
 
1724:32i:15 SQL> /
 
ADDR             KADDR                   SID TYPE        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
---------------- ---------------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
00000000DFA18358 00000000DFA18378        722 TX       655398    8738251          0          6        131          0
00000000D5263308 00000000D5263330        722 TM       371074          0          3          0        131          0
 
2 rows selected
 
Executed in 0.5 seconds


trace 文件:

 

*** 2010-08-05 01:29:53.589
WAIT #0: nam='SQL*Net message from client' ela= 469235777 driver id=1650815232 #bytes=1 p3=0 obj#=370999 tim=1250920892176778
=====================
PARSING IN CURSOR #3 len=47 dep=0 uid=197 ct=6 lid=197 tim=1250920892176901 hv=3968908762 ad='dd671c38'
update test2 set wner='JIEBINA' where rownum<2
END OF STMT
PARSE #3:c=0,e=40,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=1250920892176897
BINDS #3:
WAIT #3: nam='enq: TX - row lock contention' ela= 2930293 name|mode=1415053318 usn<<16 | slot=655398 sequence=8738251 obj#=371074 tim=1250920895107396
WAIT #3: nam='enq: TX - row lock contention' ela= 2930639 name|mode=1415053318 usn<<16 | slot=655398 sequence=8738251 obj#=371074 tim=1250920898038085
WAIT #3: nam='enq: TX - row lock contention' ela= 2930644 name|mode=1415053318 usn<<16 | slot=655398 sequence=8738251 obj#=371074 tim=1250920900968776
*** 2010-08-05 01:30:05.593
WAIT #3: nam='enq: TX - row lock contention' ela= 2930588 name|mode=1415053318 usn<<16 | slot=655398 sequence=8738251 obj#=371074 tim=1250920903899406
WAIT #3: nam='enq: TX - row lock contention' ela= 2930633 name|mode=1415053318 usn<<16 | slot=655398 sequence=8738251 obj#=371074 tim=1250920906830098


 

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

转载于:http://blog.itpub.net/8135069/viewspace-670317/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值