首页 > 开发 > 综合 > 正文

产生undo的测试

2024-07-21 02:34:16
字体:
来源:转载
供稿:网友
    在优化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          5SQL> commit;                               ---   insert select  产生较少的undoCommit 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       1000SQL> 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        244commit;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       2000SQL>     ---   过多的索引产生不必要的undo;索引dml操作相当于delete 然后 insert,都会产生undo;同时维护索引产生的redo数目也不可忽视。    什么时候set autotrace on可以包括 undo size.

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表