append与nologging的使用

本文通过实验对比了在非归档和归档模式下,使用Append、NoLogging及两者结合的方式对Oracle数据库产生的Redo大小的影响,并总结了不同模式下的最优实践。

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

insert /*+ append nologging*/    into cmgpbi_report.report_adnor_user_client
    insert /*+ append */ into table_B nologging select * from  table_A


      非归档模式下,只需append就能大量减少redo的产生;归档模式下,只有append+nologging才能大量减少redo。


select * from v$version;--10.2.0.1.0
 首先测试非归档下append,nologging,append+nologging的比较


1.非归档模式 append,nologging,append+nologging 三种情况数据产生REDO的对比
SQL> archive log list
数据库日志模式       非存档模式
自动存档             禁用
存档终点             USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列   567
当前日志序列        569


--SELECT * FROM v$database;查看数据库归档模式


create table t as select * from dba_objects where owner='GWM';
select name,value,class from v$sysstat where name='redo size'; --7653452


insert into t select * from dba_objects;--86894行插入  什么都没使用
select name,value,class from v$sysstat where name='redo size'; --17362192


insert /*+append*/ into t select * from dba_objects;--86894行插入   append的使用
select name,value,class from v$sysstat where name='redo size';--17414176


select (17362192-7653452) redo1,(17414176-17362192) redo2 from dual;    
     REDO1      REDO2
---------- ----------
     9708740    51984




drop table t;
create table t nologging as select * from dba_objects where owner='GWM';
select name,value,class from v$sysstat where name='redo size';--27239040


insert into t select * from dba_objects;--86894行插入   单独nologging的情况下


select name,value,class from v$sysstat where name='redo size';--36950884 


insert /*+append*/ into t select * from dba_objects;--86894行插入 append+nologging一起使用


select name,value,class from v$sysstat where name='redo size';--36994588




select (36950884-27239040) redo1,(36994588-36950884) redo2 from dual;
     REDO1      REDO2
---------- ----------
    9711844       43704




 


再测试归档下append,nologging,append+nologging的比较


 


2.归档下:append,nologging,append+nologging 三种情况数据产生REDO的对比
select flashback_on from v$database; --NO
SQL> archive log list
数据库日志模式       存档模式
自动存档             启用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列   568
下一个存档日志序列   570
当前日志序列         570
SQL> select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG


create table t as select * from dba_objects where owner='GWM';
select name,value from v$sysstat where name='redo size'; --262896


insert into t select * from dba_objects;--86894行插入  均无使用append及nologging


select name,value from v$sysstat where name='redo size';--9975812  使用append


 


insert /*+append*/ into t select * from dba_objects;--86894行插入  
select name,value from v$sysstat where name='redo size';--19765100


select (9975812-262896) redo1,(19765100-9975812) redo2 from dual;
     REDO1      REDO2
---------- ----------
       9712916    9789288


truncate table t;
alter table t nologging;
select name,value from v$sysstat where name='redo size';--19881868


insert into t select * from dba_objects;--86894行插入  只使用nologging
select name,value from v$sysstat where name='redo size';--29590564


insert /*+append*/ into t select * from dba_objects;--86894行插入   使用append和nologging


select name,value from v$sysstat where name='redo size';--29627424


select (29590564-19881868) redo1,(29627424-29590564) redo2 from dual;
     REDO1      REDO2
---------- ----------
      9708696        36860




总结:
非归档        
append    9708740    51984
append与nologging一块使用    9711844    43704
归档下        
append    9712916    9789288
append与nologging一块使用    9708696    36860




可以看出


1. 不管哪种模式下append要与nologging方式联用才能达到很好的效果。


2. 非归档与归档方式,只用NOLOGGING是不起效果的。


3. 非归档下append已达到不错的效果,但不及与nologging的联用方式。


4. 归档下单append起不到效果。




NOLOGGING插完后最好做个备份。


另外,如果库处在FORCELOGGING模式下,此时的nologging方式是无效的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值