第七章 Redo and Undo (二)

来源:互联网 发布:mysql循环语句 编辑:程序博客网 时间:2024/06/07 03:01

第七章 Redo and Undo (二)

oracle dba redo undo

 日月明王BLOG:    http://sunmoonking.spaces.live.com/

INDEX UNDO的影响

    INSERT只产生很少的UNDO,因为只需要记录ROWID就可以在ROLLBACK的时候UNDO

    UPDATE一般排在第二位,因为一般不会UPDATE一条记录里的所有值。

    DELETE产生的UNDO是最多的,因为DELETEUNDO需要保存所DELETE的整条记录。

    UNDO使用的大小和INDEX有很大关系。

SQL> create table wwm as

  2  select object_name unindexed,object_name indexed

  3  from all_objects;

表已创建。

SQL> create index t_wwm on wwm(indexed);

索引已创建。

SQL> exec dbms_stats.gather_table_stats('SYS','WWM');

PL/SQL 过程已成功完成。

select used_ublk

 from v$transaction

 where addr = (select taddr

 from v$session

 where sid = (select sid

 from v$mystat

 where rownum = 1

 )

 )

未选定行

SQL> update wwm set unindexed=lower(unindexed);

已更新29138行。

SQL> select used_ublk

  2   from v$transaction

  3   where addr = (select taddr

  4   from v$session

  5   where sid = (select sid

  6   from v$mystat

  7   where rownum = 1

  8   )

  9   )

 10  /

 USED_UBLK

----------

       399

看到这次更新用了399BLOCK去存储UNDO信息

SQL> commit;

提交完成。

SQL> select used_ublk

  2   from v$transaction

  3   where addr = (select taddr

  4   from v$session

  5   where sid = (select sid

  6   from v$mystat

  7   where rownum = 1

  8   )

  9   )

 10  /

未选定行

         COMMITUNDO被释放。

         然后在UPDATE有索引的列.

SQL> update wwm set indexed=lower(indexed);

已更新29138行。

SQL> select used_ublk

  2   from v$transaction

  3   where addr = (select taddr

  4   from v$session

  5   where sid = (select sid

  6   from v$mystat

  7   where rownum = 1

  8   )

  9   )

 10  /

 USED_UBLK

----------

      1132         看到在有INDEX上做UPDATE会产生4倍左右的UNDO. 

 
原创粉丝点击