当一个表被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/
1338

被折叠的 条评论
为什么被折叠?



