下图为表在noarchivelog&archive、nologging&logging模式下,带index与不带index时,执行append插入所产生的redo大小差别汇总,到底哪种模式下产生日志最小呢?请仔细看下图:
========================================================================================== ArchiveLog Table Mode index Mode Insert Mode result ----------- ------------- ----------------- ---------- ---------- noarchivelog logging index append 8,579,384 noarchivelog no logging index append 9,181,052 noarchivelog logging no index append 85,796 noarchivelog logging index no append 21,203,404 noarchivelog no logging no index append 82,176 noarchivelog no logging index no append 31,990,384 noarchivelog logging no index no append 5,740,408 noarchivelog no logging no index no append 8,416,268 ------------------------------------------------------------------------------------------ archivelog logging index append 7,803,312 archivelog no logging index append 13,537,620 archivelog logging no index append 5,810,724 archivelog logging index no append 20,159,860 archivelog no logging no index append 82,248 archivelog no logging index no append 20,006,884 archivelog logging no index no append 5,739,100 archivelog no logging no index no append 8,640,828 ==========================================================================================
下面是测试:
--noarchive_redo.sql执行结果 SQL> archive log list; Database log mode No Archive Mode Automatic archival Disabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 16 Current log sequence 18 SQL> @noarchive_redo.sql SQL> --**noarchivelog**logging**index**append SQL> create table t1 tablespace users as select * from dba_objects where 1=0; Table created. SQL> alter table t1 nologging; Table altered. SQL> create index t1_idx on t1(object_name); Index created. SQL> mystat.sql SQL> set echo off NAME VALUE -------------------- ---------- redo size 50544 SQL> insert /*+append*/ into t1 select * from dba_objects; 50624 rows created. SQL> commit; Commit complete. SQL> mystat2.sql SQL> set echo off NAME V DIFF -------------------- ---------- ---------------- redo size 8629928 8,579,384 SQL> drop table t1; Table dropped. SQL> alter system checkpoint; System altered. SQL> SQL> --**noarchivelog**no logging**index**append SQL> create table t1 tablespace users as select * from dba_objects where 1=0; Table created. SQL> --alter table t1 nologging; SQL> create index t1_idx on t1(object_name); Index created. SQL> mystat.sql SQL> set echo off NAME VALUE -------------------- ---------- redo size 8663892 SQL> insert /*+append*/ into t1 select * from dba_objects; 50625 rows created. SQL> commit; Commit complete. SQL> mystat2.sql SQL> set echo off NAME V DIFF -------------------- ---------- ---------------- redo size 17844944 9,181,052 SQL> drop table t1; Table dropped. SQL> alter system checkpoint; System altered. SQL> SQL> --**noarchivelog**logging**no index**append SQL> create table t1 tablespace users as select * from dba_objects where 1=0; Table created. SQL> --alter table t1 nologging; SQL> --create index t1_idx on t1(object_name); SQL> mystat.sql SQL> set echo off NAME VALUE -------------------- ---------- redo size 17872888 SQL> insert /*+append*/ into t1 select * from dba_objects; 50624 rows created. SQL> commit; Commit complete. SQL> mystat2.sql SQL> set echo off NAME V DIFF -------------------- ---------- ---------------- redo size 17958684 85,796 SQL> drop table t1; Table dropped. SQL> alter system checkpoint; System altered. SQL> SQL> --**noarchivelog**logging**index**no append SQL> create table t1 tablespace users as select * from dba_objects where 1=0; Table created. SQL> create index t1_idx on t1(object_name); Index created. SQL> mystat.sql SQL> set echo off NAME VALUE -------------------- ---------- redo size 17988968 SQL> insert into t1 select * from dba_objects; 50624 rows created. SQL> commit; Commit complete. SQL> mystat2.sql SQL> set echo off NAME V DIFF -------------------- ---------- ---------------- redo size 39192372 21,203,404 SQL> drop table t1; Table dropped. SQL> alter system checkpoint; System altered. SQL> SQL> --**noarchivelog**no logging**no index**append SQL> create table t1 tablespace users as select * from dba_objects where 1=0; Table created. SQL> alter table t1 nologging; Table altered. SQL> mystat.sql SQL> set echo off NAME VALUE -------------------- ---------- redo size 39222248 SQL> insert /*+append*/ into t1 select * from dba_objects; 50623 rows created. SQL> commit; Commit complete. SQL> mystat2.sql SQL> set echo off NAME V DIFF -------------------- ---------- ---------------- redo size 39304424 82,176 SQL> drop table t1; Table dropped. SQL> alter system checkpoint; System altered. SQL> SQL> --**noarchivelog**no logging**index**no append SQL> create table t1 tablespace users as select * from dba_objects where 1=0; Table created. SQL> alter table t1 nologging; Table altered. SQL> create index t1_idx on t1(object_name); Index created. SQL> mystat.sql SQL> set echo off NAME VALUE -------------------- ---------- redo size 39336740 SQL> insert into t1 select * from dba_objects; 50624 rows created. SQL> commit; Commit complete. SQL> mystat2.sql SQL> set echo off NAME V DIFF -------------------- ---------- ---------------- redo size 71327124 31,990,384 SQL> drop table t1; Table dropped. SQL> alter system checkpoint; System altered. SQL> SQL> --**noarchivelog**logging**no index**no append SQL> create table t1 tablespace users as select * from dba_objects where 1=0; Table created. SQL> mystat.sql SQL> set echo off NAME VALUE -------------------- ---------- redo size 71355752 SQL> insert into t1 select * from dba_objects; 50623 rows created. SQL> commit; Commit complete. SQL> mystat2.sql SQL> set echo off NAME V DIFF -------------------- ---------- ---------------- redo size 77096160 5,740,408 SQL> drop table t1; Table dropped. SQL> alter system checkpoint; System altered. SQL> SQL> --**noarchivelog**no logging**no index**no append SQL> create table t1 tablespace users as select * from dba_objects where 1=0; Table created. SQL> alter table t1 nologging; Table altered. SQL> create index t1_idx on t1(object_name); Index created. SQL> mystat.sql SQL> set echo off NAME VALUE -------------------- ---------- redo size 77127604 SQL> insert /*+append*/ into t1 select * from dba_objects; 50624 rows created. SQL> commit; Commit complete. SQL> mystat2.sql SQL> set echo off NAME V DIFF -------------------- ---------- ---------------- redo size 85543872 8,416,268 SQL> drop table t1; Table dropped. SQL> alter system checkpoint; System altered. SQL>
--archive_redo.sql执行结果 SQL> @redo.sql SQL> --**archivelog**logging**index**append SQL> create table t1 tablespace users as select * from dba_objects where 1=0; Table created. SQL> alter table t1 nologging; Table altered. SQL> create index t1_idx on t1(object_name); Index created. SQL> mystat.sql SQL> set echo off NAME VALUE -------------------- ---------- redo size 358404892 SQL> insert /*+append*/ into t1 select * from dba_objects; 50624 rows created. SQL> commit; Commit complete. SQL> mystat2.sql SQL> set echo off NAME V DIFF -------------------- ---------- ---------------- redo size 366208204 7,803,312 SQL> drop table t1; Table dropped. SQL> alter system checkpoint; System altered. SQL> SQL> --**archivelog**no logging**index**append SQL> create table t1 tablespace users as select * from dba_objects where 1=0; Table created. SQL> --alter table t1 nologging; SQL> create index t1_idx on t1(object_name); Index created. SQL> mystat.sql SQL> set echo off NAME VALUE -------------------- ---------- redo size 366243316 SQL> insert /*+append*/ into t1 select * from dba_objects; 50625 rows created. SQL> commit; Commit complete. SQL> mystat2.sql SQL> set echo off NAME V DIFF -------------------- ---------- ---------------- redo size 379780936 13,537,620 SQL> drop table t1; Table dropped. SQL> alter system checkpoint; System altered. SQL> SQL> --**archivelog**logging**no index**append SQL> create table t1 tablespace users as select * from dba_objects where 1=0; Table created. SQL> --alter table t1 nologging; SQL> --create index t1_idx on t1(object_name); SQL> mystat.sql SQL> set echo off NAME VALUE -------------------- ---------- redo size 379808948 SQL> insert /*+append*/ into t1 select * from dba_objects; 50624 rows created. SQL> commit; Commit complete. SQL> mystat2.sql SQL> set echo off NAME V DIFF -------------------- ---------- ---------------- redo size 385619672 5,810,724 SQL> drop table t1; Table dropped. SQL> alter system checkpoint; System altered. SQL> SQL> --**archivelog**logging**index**no append SQL> create table t1 tablespace users as select * from dba_objects where 1=0; Table created. SQL> create index t1_idx on t1(object_name); Index created. SQL> mystat.sql SQL> set echo off NAME VALUE -------------------- ---------- redo size 385651228 SQL> insert into t1 select * from dba_objects; 50624 rows created. SQL> commit; Commit complete. SQL> mystat2.sql SQL> set echo off NAME V DIFF -------------------- ---------- ---------------- redo size 405811088 20,159,860 SQL> drop table t1; Table dropped. SQL> alter system checkpoint; System altered. SQL> SQL> --**archivelog**no logging**no index**append SQL> create table t1 tablespace users as select * from dba_objects where 1=0; Table created. SQL> alter table t1 nologging; Table altered. SQL> mystat.sql SQL> set echo off NAME VALUE -------------------- ---------- redo size 405840964 SQL> insert /*+append*/ into t1 select * from dba_objects; 50623 rows created. SQL> commit; Commit complete. SQL> mystat2.sql SQL> set echo off NAME V DIFF -------------------- ---------- ---------------- redo size 405923212 82,248 SQL> drop table t1; Table dropped. SQL> alter system checkpoint; System altered. SQL> SQL> --**archivelog**no logging**index**no append SQL> create table t1 tablespace users as select * from dba_objects where 1=0; Table created. SQL> alter table t1 nologging; Table altered. SQL> create index t1_idx on t1(object_name); Index created. SQL> mystat.sql SQL> set echo off NAME VALUE -------------------- ---------- redo size 405957776 SQL> insert into t1 select * from dba_objects; 50624 rows created. SQL> commit; Commit complete. SQL> mystat2.sql SQL> set echo off NAME V DIFF -------------------- ---------- ---------------- redo size 425964660 20,006,884 SQL> drop table t1; Table dropped. SQL> alter system checkpoint; System altered. SQL> SQL> --**archivelog**logging**no index**no append SQL> create table t1 tablespace users as select * from dba_objects where 1=0; Table created. SQL> mystat.sql SQL> set echo off NAME VALUE -------------------- ---------- redo size 425993216 SQL> insert into t1 select * from dba_objects; 50623 rows created. SQL> commit; Commit complete. SQL> mystat2.sql SQL> set echo off NAME V DIFF -------------------- ---------- ---------------- redo size 431732316 5,739,100 SQL> drop table t1; Table dropped. SQL> alter system checkpoint; System altered. SQL> SQL> --**archivelog**no logging**no index**no append SQL> create table t1 tablespace users as select * from dba_objects where 1=0; Table created. SQL> alter table t1 nologging; Table altered. SQL> create index t1_idx on t1(object_name); Index created. SQL> mystat.sql SQL> set echo off NAME VALUE -------------------- ---------- redo size 431765652 SQL> insert /*+append*/ into t1 select * from dba_objects; 50624 rows created. SQL> commit; Commit complete. SQL> mystat2.sql SQL> set echo off NAME V DIFF -------------------- ---------- ---------------- redo size 440406480 8,640,828 SQL> drop table t1; Table dropped. SQL> alter system checkpoint; System altered. SQL>