ITPub博客

首页 > 数据库 > Oracle > Oracle 12C 临时undo

Oracle 12C 临时undo

原创 Oracle 作者:snoover 时间:2017-06-08 11:35:08 0 删除 编辑

1 Oracle 12C 临时undo

      在Oracle 12c R1之前,undo记录是由临时表产生并存储在undo表空间的。12c R1的到来,引入了临时undo功能,现在undo记录就存储在临时表中,而不用再存储到undo表空间中。这样以来,就不会产生redo日志了,从而undo表空间的开销得以减少,对数据库库的性能可以有所提升。

2 测试

2.1 不启用临时undo


点击(此处)折叠或打开

  1. SQL> alter system set temp_undo_enabled=false;

  2. System altered.

  3. SQL> show parameter undo

  4. NAME TYPE VALUE
  5. ------------------------------------ ----------- ------------------------------
  6. temp_undo_enabled boolean FALSE
  7. undo_management string AUTO
  8. undo_retention integer 900
  9. undo_tablespace string UNDOTBS1

  10. SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');

  11. NAME                                 VALUE
  12. ---------------------------------------------------------------- ----------
  13. redo entries                            280
  14. redo size                            111840
  15. SQL> create global temporary table temp_snoover as select * from dba_objects where 1=2;


    Table created.


    SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');


    NAME                                                                  VALUE
    ---------------------------------------------------------------- ----------
    redo entries                                                            384
    redo size                                                            145812

*.可以看出来做ddl操作,日志变化还是很明显

点击(此处)折叠或打开

  1. SQL> insert into temp_snoover select * from dba_objects;

  2. 135216 rows created.

  3. SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');
  4. NAME VALUE
  5. ---------------------------------------------------------------- ----------
  6. redo entries 4635
  7. redo size 1130824
*.现在更加能够明显的看出来做dml操作日志变化是非常巨大的。

2.2 临时undo开启

点击(此处)折叠或打开

  1. SQL> alter system set temp_undo_enabled=true;

  2. System altered.

  3. SQL> show parameter undo

  4. NAME TYPE VALUE
  5. ------------------------------------ ----------- ------------------------------
  6. temp_undo_enabled boolean TRUE
  7. undo_management string AUTO
  8. undo_retention integer 900
  9. undo_tablespace string UNDOTBS1

点击(此处)折叠或打开

  1. SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');

  2. NAME VALUE
  3. ---------------------------------------------------------------- ----------
  4. redo entries 2
  5. redo size 808


点击(此处)折叠或打开

  1. SQL> insert into temp_snoover select * from dba_objects;

  2. 135216 rows created.

  3. SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');

  4. NAME VALUE
  5. ---------------------------------------------------------------- ----------
  6. redo entries 6
  7. redo size 1804
*.可以看出产生的redo日志是很小的,再次插入数据测试;

点击(此处)折叠或打开

  1. SQL> insert into temp_snoover select * from dba_objects;

  2. 135216 rows created.

  3. SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');

  4. NAME VALUE
  5. ---------------------------------------------------------------- ----------
  6. redo entries 6
  7. redo size 1804
*.redo日志大小没有变化。

3 结论

通过测试,在temp_undo_enabled参数为true后,redo生成的量就非常小了,这样更加的节存储空间且可以提高数据库性能。
注:此参数默认false。                                      

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

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2016-10-19

  • 博文量
    1
  • 访问量
    1673