enq: TX - row lock contention(一)

enq: TX - row lock contention

系统中一直发生
enq: TX - row lock contention
对硬的语句是一个insert
不知道如何处理
再现等待,着急!

看下lmode是多少
列上有约束或者有主键?
lmod=6
bitmap index ?
检查下是不是主键约束,唯一索引限制了
查询v$lock里有一个block=1,说明该session 阻晒了其他session
被阻塞的session都市同一个insert语句insert into T_CONTCT_PRUCT_LOG
没有bitmap index
这个问题好像很简单。
一个insert 没有commit.
而这个列上有约束,另一个session Insert只能被block住。

--------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------

顺便问下:commit和释放表的锁还是有区别?
这个insert语句的commit,代表释放对表的lock?>



yes,commit and rollback will release the resources hold by the transaction.
QUOTE:
原帖由 dhcwenOra 于 2007-12-26 16:10 发表
补充一下,delete也会师一样的情况!

更补充到:对于row lock,应该是DML这类情况,都会一样。
---------------------------------------------------------------------------------------------------------------------------------
QUOTE:
原帖由 joeldavid 于 2007-12-26 15:40 发表
session1往t1插入了一条数据,然后没有提交;session2往t1插入了一条数据,由于怕主建重复,session2需要等待session1 commit;
这样理解对吗?

session 2 需要等待session1对t1的lock释放后才可以

如果你插入的是两条不同的记录,是没有问题的。
---------------------------------------------------------------------------------------------------------------------------------
结帖了;
非常感谢各位的帮忙!
总结一下:
1,两个不同的SESSION同时插入或者在没有COMMIT时先后插入相同的记录到同一个表时,发生TX阻赛;
2,两个不同的SESSION同时插入不会发生TX阻赛;

发生1的场合:
由于页面没有禁止重复提交或刷新,用户可能会不断的刷新,造成TX阻赛现象!
**************************************************************************************

QUOTE:
--------------------------------------------------------------------------------
原帖由 joeldavid 于 2007-12-26 15:47 发表

--session1


SQL
>createtablet1(xintprimarykey);

表已创建。

SQL
>insertintot1values(1);


已创建1行。


--session2


SQL
>insertintot1values(1);


wasblockbysession1;


SQL>selectsid,type,id1,id2,lmode,request,blockfromv$lockwheresidin(151,156)andtype='TX';


SIDTYID1ID2LMODEREQUESTBLOCK


--------------------------------------------------------------


151TX3277131334040


151TX655801271600


156TX327713133460&nb

**********************************************************************************

顺便问下:commit和释放表的锁还是有区别?
这个insert语句的commit,代表释放对表的lock?>
--------------------------------------------------------------------------------


yes,commit and rollback will release the resources hold by the transaction.

**********************************************************************************

QUOTE:
--------------------------------------------------------------------------------
原帖由 dhcwenOra 于 2007-12-26 16:10 发表
补充一下,delete也会师一样的情况!
--------------------------------------------------------------------------------


更补充到:对于row lock,应该是DML这类情况,都会一样。

***********************************************************************************

QUOTE:
--------------------------------------------------------------------------------
原帖由 joeldavid 于 2007-12-26 15:40 发表
session1往t1插入了一条数据,然后没有提交;session2往t1插入了一条数据,由于怕主建重复,session2需要等待session1 commit;
这样理解对吗?

session 2 需要等待session1对t1的lock释放后才可以
--------------------------------------------------------------------------------


如果你插入的是两条不同的记录,是没有问题的。

************************************************************************************

结帖了;
非常感谢各位的帮忙!
总结一下:
1,两个不同的SESSION同时插入或者在没有COMMIT时先后插入相同的记录到同一个表时,发生TX阻赛;
2,两个不同的SESSION同时插入不会发生TX阻赛;

发生1的场合:
由于页面没有禁止重复提交或刷新,用户可能会不断的刷新,造成TX阻赛现象!

from:

http://www.itpub.net/viewthread.php?tid=916999

你可能感兴趣的:(content)