insert /*+append */ 带来的问题

insert /*+append */
在有些情况下我们为了加快插入速度使用insert /*+append */
1、无论归档模式、还是非归档模式,append+nologing插入方式效果最好,生成最小的redo日志

2、非归档模式下,append插入模式效果不错

3、归档模式下,append插入模式没有效果
我们做个测试
session1
create table ljl as select * from dba_objects;
insert /*+append*/ into ljl select * from dba_objects;
session2
insert /*+append*/ into ljl select * from dba_objects;
session2卡住
session1

SQL> SELECT DECODE(request, 0, 'Holder: ', 'Waiter: ') || SID sess,
  2         decode(lmode,
  3                0,
  4                'none',
  5                1,
  6                'null',
  7                2,
  8                'row share',
  9                3,
 10                'row exclusive',
 11                4,
 12                'share',
 13                5,
 14                'share row exclusive',
 15                6,
 16                'exclusive') lmode,
 17         ctime,
 18         inst_id,
 19         id1,
 20         id2,
 21         lmode,
 22         request,
 23         TYPE
 24    FROM gV$LOCK
 25   WHERE (id1, id2, TYPE) IN
 26         (SELECT id1, id2, TYPE FROM gV$LOCK WHERE request > 0)
 27   ORDER BY id1, request;

SESS                                             LMODE                    CTIME
------------------------------------------------ ------------------- ----------
   INST_ID        ID1        ID2      LMODE    REQUEST TY
---------- ---------- ---------- ---------- ---------- --
Holder: 25                                       exclusive                   18
         1      87380          0          6          0 TM

Waiter: 46                                       none                        16
         1      87380          0          0          6 TM


可以看到被堵住了
再做一个测试
session1
insert /*+append*/ into ljl select * from dba_objects;
session2
insert into ljl select * from dba_objects;

SQL> SELECT DECODE(request, 0, 'Holder: ', 'Waiter: ') || SID sess,
  2         decode(lmode,
  3                0,
  4                'none',
  5                1,
  6                'null',
  7                2,
  8                'row share',
  9                3,
 10                'row exclusive',
 11                4,
 12                'share',
 13                5,
 14                'share row exclusive',
 15                6,
 16                'exclusive') lmode,
 17         ctime,
 18         inst_id,
 19         id1,
 20         id2,
 21         lmode,
 22         request,
 23         TYPE
 24    FROM gV$LOCK
 25   WHERE (id1, id2, TYPE) IN
 26         (SELECT id1, id2, TYPE FROM gV$LOCK WHERE request > 0)
 27   ORDER BY id1, request;

SESS                                             LMODE                    CTIME
------------------------------------------------ ------------------- ----------
   INST_ID        ID1        ID2      LMODE    REQUEST TY
---------- ---------- ---------- ---------- ---------- --
Holder: 25                                       row exclusive               67
         1      87380          0          3          0 TM

Waiter: 46                                       none                        45
         1      87380          0          0          6 TM
也同样被锁住了
分析原因
insert /*+append */ 加的的是TM级锁,每一条语句执行后进行commit释放TM锁

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

转载于:http://blog.itpub.net/30068249/viewspace-1731599/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值