执行DML 期间,为防止对与DML 相关的对象进行修改,执行DML 的进程必须对该表获得TM 锁。
P1 = name|mode
P2 = object #
P3 = table/partition
SQL> select name,parameter1,parameter2,parameter3 from v$event_name where name like 'enq: TM - contention'; NAME PARAMETER1 PARAMETER2 PARAMETER3 ------------------------------ -------------------- -------------------- -------------------- enq: TM - contention name|mode object # table/partition
|
解决办法:可以通过下面的sql 查询blocker
SELECT distinct w.tm, w.p2 OBJECT_ID, l.inst_id, l.sid, l.lmode, l.request,l.block FROM ( SELECT p2, p3, 'TM-'||substr(p2raw,-8)||'-'||lpad(p3,8,'0') TM FROM v$session_wait WHERE event='enq: TM - contention' and state='WAITING' ) W, gv$lock L WHERE l.type(+)='TM' and l.id1(+)=w.p2 and l.id2(+)=w.p3 ORDER BY tm, lmode desc, request desc ; |
一般发生TM 争用的情况如下:
l DDL 动作
l Lock table tab_name in share mode;lock table tab_name in exclusive mode ;
l INSERT /*+ APPEND */ INTO
l SQL*Loader 的direct path load
l 外键约束无索引
会话1 :
SYS@cdbtest1(CDB$ROOT)> lock table t in exclusive mode; Table(s) Locked. |
会话2 :
SYS@cdbtest1(CDB$ROOT)> update t set object_id=100 where object_id=100; |
查询等待事件
SYS@cdbtest1(CDB$ROOT)> select inst_id, event#, event,count(*) from gv$session 2 where wait_class# <> 6 3 group by inst_id, event#,event 4 order by 1,4 desc; INST_ID EVENT# EVENT COUNT(*) ---------- ---------- ------------------------------ ---------- 1 278 enq: TM - contention 1 1 414 SQL*Net message to client 1 |
查询blocker
SELECT distinct w.tm, w.p2 OBJECT_ID, l.inst_id, l.sid, l.lmode, l.request,l.blocklmode, l.request,l.block FROM 2 3 ( SELECT p2, p3, 'TM-'||substr(p2raw,-8)||'-'||lpad(p3,8,'0') TM 4 FROM v$session_wait 5 WHERE event='enq: TM - contention' 6 and state='WAITING' 7 ) W, 8 gv$lock L 9 WHERE l.type(+)='TM' 10 and l.id1(+)=w.p2 11 and l.id2(+)=w.p3 12 ORDER BY tm, lmode desc, request desc 13 ; TM OBJECT_ID INST_ID SID LMODE REQUEST BLOCK -------------------- ---------- ---------- ---------- ---------- ---------- ---------- TM-00013866-00000000 79974 1 113 6 0 1 TM-00013866-00000000 79974 1 91 0 3 0 |
阻塞者是113 ,被阻塞者是91.
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。