您的位置:首页 > 其它

enq: TX - row lock contention(一)

2010-04-14 23:43 369 查看

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 发表

--session 1

SQL> create table t1(x int primary key);

表已创建。

SQL> insert into t1 values(1);

已创建 1 行。

--session 2

SQL> insert into t1 values(1);

was block by session 1;

SQL> select sid,type,id1,id2 ,lmode,request,block from v$lock where sid in (151,156) and type='TX';

SID TY ID1 ID2 LMODE REQUEST BLOCK

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

151 TX 327713 1334 0 4 0

151 TX 65580 1271 6 0 0

156 TX 327713 1334 6 0 &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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: