ITPub博客

首页 > Linux操作系统 > Linux操作系统 > APPEND时的TM锁定级别

APPEND时的TM锁定级别

原创 Linux操作系统 作者:westzq1984 时间:2009-09-22 21:45:04 0 删除 编辑

朋友问他们INSERT由于TM锁阻塞了其他会话的UPDATE语句

听到的第一个反应的外键列没有索引,当是他说没外键索引的这个问题

根据他给我东西看:
SID                                   ID1        ID2      LMODE    REQUEST TY
------------------------------ ---------- ---------- ---------- ---------- --
HOLDER:1510                         66571          0          6          0 TM
WAITER:104                          66571          0          0          3 TM
WAITER:118                          66571          0          0          3 TM
WAITER:353                          66571          0          0          3 TM
WAITER:546                          66571          0          0          3 TM

TM6阻塞了TM3,TM6是独占锁,应该是在DDL语句时候才会有的,又让他给我看捕获的语句

INSERT /*+ APPEND */ INTO ACPDR ( SELECT A.*, DECODE( B.DOCID, N
UPDATE acpdr SET CHKFLG=1,LSERIAL_NO='bp_tmpdata_1_tb;328506139'
UPDATE acpdr SET CHKFLG=1,LSERIAL_NO='bp_tmpdata_1_tb;328519175'

一看到这个APPEND我就觉得不对,估计是这个提示的原因,让他查了下,ID1 66571是表acpdr的P10分区

自己测试了下:
SQL> INSERT INTO test SELECT * FROM dba_objects;
 
6940 rows inserted
 
SQL> SELECT * FROM v$lock WHERE sid=(SELECT sid FROM v$mystat WHERE ROWNUM=1);
 
ADDR     KADDR           SID TYPE        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
-------- -------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
52F7F8E8 52F7F9F4         16 TX      1048608         37          6          0         30          0
52F4D1D4 52F4D1E8         16 TM         7608          0          3          0         30          0
 
SQL> INSERT /*+append*/ INTO test SELECT * FROM dba_objects;
 
6940 rows inserted
 
SQL> SELECT * FROM v$lock WHERE sid=(SELECT sid FROM v$mystat WHERE ROWNUM=1);
 
ADDR     KADDR           SID TYPE        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
-------- -------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
52F7F8E8 52F7F9F4         16 TX      1048608         37          6          0         51          0
52F4D1D4 52F4D1E8         16 TM         7608          0          6          0          6          0

可以看到,APPEND确实是用TM6来锁表的。估计用TM6的原因是,APPEND是在高水位线上直接插入,为了回滚的需求而需要的(在回滚时,直接从位图中删除分配的盘区信息)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8242091/viewspace-615357/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-04-06

  • 博文量
    251
  • 访问量
    948494