enq: TX

10.3.6.2.4 TX enqueue:

那些是排他的当一个事务开始它的第一次改变持有知道COMMIT或者ROLLBACK:

Waits for TX in mode 6:

发生当一个session 是等待一个row level lock 被其他session持有。

这个发生在一个yoghurt是更新或者删除一个记录, 另外一个session需要来更新或者删除。

这类TX enqueue 等待对应于 wait event enq: TX - row lock contention.


解决方案是第一个持有lock的session执行一个COMMIT或者ROLLBACK

SESSION 1:

SQL> select * from v$mystat where rownum<2;

       SID STATISTIC#	   VALUE
---------- ---------- ----------
      1178	    0	       0
SQL> update test set id=200 where id=2;

已更新 1 行。



SESSION 2:


SQL> select * from v$mystat where rownum<2;

       SID STATISTIC#	   VALUE
---------- ---------- ----------
       584	    0	       0

SQL> 
SQL> update test set id=300 where id=2;  --hang


SQL>  select * from v$lock a where sid in (1178,584) and type in ('TM','TX');

ADDR		 KADDR			 SID TY        ID1	  ID2	   LMODE    REQUEST	 CTIME	    BLOCK
---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
00000001840D1910 00000001840D1968	 584 TX     196631	47429	       0	  6	    81		0
00007FB180654A68 00007FB180654AC8	 584 TM      99891	    0	       3	  0	    81		0
00007FB180654A68 00007FB180654AC8	1178 TM      99891	    0	       3	  0	   131		0
000000017F752FA0 000000017F753018	1178 TX     196631	47429	       6	  0	   131		1



SQL> select sid, SERIAL#, USERNAME,p1,p2,p3,event, BLOCKING_SESSION from v$session where sid in (1178,584);

       SID    SERIAL# USERNAME				     P1 	P2	   P3 EVENT							       BLOCKING_SESSION
---------- ---------- ------------------------------ ---------- ---------- ---------- ---------------------------------------------------------------- ----------------
       584	49455 QUERY			     1415053318     196631	47429 enq: TX - row lock contention						   1178
      1178	53813 QUERY			     1650815232 	 1	    0 SQL*Net message from client

SQL> 

原文地址:https://www.cnblogs.com/hzcya1995/p/13349733.html