insert /*+append*/ 和nologging在归档和非归档模式下redo测试

本文通过实验对比了在非归档和归档模式下,使用logging和nologging模式进行insert和insert/*+append*/操作时redo生成量的变化,旨在为数据迁移提供优化建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       在归档模式和非归档模式下,设定表为logging和nologging,测量普通的insert 和insert /*+append*/生成redo大小。第一次测试我对下列结果报怀疑态度,于是又重新测试一遍,结果差不多,想想是测试的数量太少。如果是在正式环境上做数据迁移,最好就选择最后一种模式。

             模式普通insert下redo生成量(Byte)insert/*+append*/下redo生成量(Byte)
非归档模式(表logging)570632488340
非归档模式(表nologging)568586463348
归档模式(表logging)568619663424
归档模式(表nologging)568536463348

 

1.      非归档模式

SQL> create view m_redo as

  2   select  value

  3   from v$sysstat, v$statname

  4  where v$sysstat.statistic# =v$statname.statistic#

  5     and v$statname.name ='redo size';

SQL> create table test as select * from dba_objects where 1=0;

1.1表为logging

SQL> select * from  m_redo;

     VALUE

----------

   9236752

SQL> insert into test select * from dba_objects;

已创建50325行。

SQL> commit;

 

SQL> select * from  m_redo;

     VALUE

----------

  14943076

SQL> select (14943076-9236752)/1024/1024||'M' from dual;

(14943076-9236752)/10

---------------------

5.441974639892578125M

SQL> truncate table test;

SQL> select * from  m_redo;

     VALUE

----------

  15048424

SQL> insert /*+append*/  into test select * from dba_objects;

已创建50325行。

SQL> commit;

SQL> select * from  m_redo;

     VALUE

----------

  15136764

SQL> select (15136764-15048424)/1024/1024||'M' from dual;

(15136764-15048424)/

--------------------

.084247589111328125M

1.2表为nologging

SQL> truncate table test;

SQL> alter table test nologging;

SQL> select * from  m_redo;

     VALUE

----------

  15190864

SQL> insert into test select * from dba_objects;

已创建50325行。

SQL> commit;

SQL> select * from  m_redo;

     VALUE

----------

  20876728

SQL> select (20876728-15190864)/1024/1024||'M' from dual;

(20876728-15190864)/

--------------------

5.42246246337890625M

SQL> truncate table test;

SQL> select * from  m_redo;

     VALUE

----------

  20937256

SQL> insert /*+append*/  into test select * from dba_objects;

已创建50325行。

SQL> commit;

SQL> select * from  m_redo;

     VALUE

----------

  21000604

SQL> select (21000604-20937256)/1024/1024||'M' from dual;

(21000604-20937256)/

--------------------

.060413360595703125M

 

2.      归档模式

 在重新开一个session

SQL> conn test/test

已连接。

SQL>shutdown immediate

SQL>startup mount

SQL>alter database archivelog

SQL> alter database open;

数据库已更改。

1.1  表为logging

SQL> truncate table test;

表被截断。

SQL> select * from m_redo;

    VALUE

----------

   130848

SQL> insert into test select * from dba_objects;

已创建50325行。

SQL> commit;

SQL> select * from m_redo;

    VALUE

----------

  5817044

SQL> select (5817044-130848)/1024/1024||'M' from dual;

(5817044-130848)/1024

---------------------

5.422779083251953125M

SQL> truncate table test;

SQL> select * from m_redo;

    VALUE

----------

  5879644

SQL> insert /*+append*/ into test select * from dba_objects;

已创建50325行。

SQL> commit;

SQL> select * from m_redo;

    VALUE

----------

  5943068

SQL> select (5943068-5879644)/1024/1024||'M' from dual;

(5943068-5879644

----------------

.06048583984375M

1.2  表为nologging

SQL> truncate table test;

SQL> alter table test nologging;

表已更改。

SQL> select * from m_redo;

    VALUE

----------

  5990988

SQL> insert into test select * from dba_objects;

已创建50325行。

SQL> commit;

SQL> select * from m_redo;

    VALUE

----------

  11676352

SQL> select (11676352-5990988)/1024/1024||'M' from dual;

(11676352-5990988)/10

---------------------

5.421985626220703125M

SQL> truncate table test;

SQL> select * from m_redo;

    VALUE

----------

  11736328

SQL> insert /*+append*/ into test select * from dba_objects;

已创建50325行。

SQL> commit;

SQL> select * from m_redo;

    VALUE

----------

  11799676

SQL> select (11799676-11736328)/1024/1024||'M' from dual;

(11799676-11736328)/

--------------------

.060413360595703125M

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值