Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2088275
  • 博文数量: 1647
  • 博客积分: 80000
  • 博客等级: 元帅
  • 技术积分: 9980
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 15:15
文章分类

全部博文(1647)

文章存档

2011年(1)

2008年(1646)

我的朋友

分类:

2008-10-28 17:44:18

    在优化sql的时候也要考虑undo产生的数目了; 如果可能,使用 insert select ,比insert row by row要快好多。

SQL> create table t(id number);

Table created.

SQL>  insert into t   select object_id from dba_objects where rownum<=1000;

1000 rows created.

SQL>  select used_ublk,used_urec  from v$transaction;

 USED_UBLK  USED_UREC
---------- ----------
         1          5

SQL> commit;                               ---   insert select  产生较少的undo

Commit complete.

SQL> begin
  2  for i in 1..1000 loop
  3  insert into t values(i);
  4  end loop;
  5  end;
  6  /

PL/SQL procedure successfully completed.

SQL>  select used_ublk,used_urec  from v$transaction;

 USED_UBLK  USED_UREC                      ---   insert row by row产生较多的undo
---------- ----------
         9       1000

SQL> truncate table t;

Table truncated.

SQL> create index t_idx on t(id);

Index created.

SQL> insert into t   select object_id from dba_objects where rownum<=1000 ;

1000 rows created.

SQL>  select used_ublk,used_urec  from v$transaction;

 USED_UBLK  USED_UREC
---------- ----------
         6        244

commit;

SQL>  begin
  2  for i in 1..1000 loop
  3   insert into t values(i); end loop;
  4  end;
  5  /

PL/SQL procedure successfully completed.

SQL>  select used_ublk,used_urec  from v$transaction;

 USED_UBLK  USED_UREC
---------- ----------
        20       2000

SQL>     ---   过多的索引产生不必要的undo;索引dml操作相当于delete 然后 insert,都会产生undo;同时维护索引产生的redo数目也不可忽视。

    什么时候set autotrace on可以包括 undo size.

【责编:Amy】

--------------------next---------------------

阅读(223) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~