Oracle redo日志产生量测试及比较(2)

SQL> select 70064 last,1344112 as cur,(1344112-70064) diff from dual; 
 
              LAST        CUR      DIFF
        ---------- ---------- ----------
            70064    1344112      1274048          ----查看logging模式产生的redo size 为-68420=1274048,比nologging日志模,有19倍多!
             
 
        SQL> select table_name,logging from user_tables where table_name like 'MYTEST%';--查看创建表的日志记录模式
 
        TABLE_NAME                    LOG
        ------------------------------ ---
        MYTEST                        YES
        MYTEST_NOLOG                  NO
 
    4.基于索引来比较redo size(同样是在归档模式下)
        SQL> SELECT a.name,b.value  FROM v$statname a JOIN v$mystat b ON a.statistic# = b.statistic# WHERE a.name = 'redo size';;    --查看当前的redo_size
 
        NAME                VALUE
        --------------- ----------
        redo size            1140
 
        SQL> create index idx_mytest on mytest(object_id);  --基于表mytest来创建索引
 
        SQL> SELECT a.name,b.value  FROM v$statname a JOIN v$mystat b ON a.statistic# = b.statistic# WHERE a.name = 'redo size';;      --查看当前的redo_size
 
        NAME                VALUE
        --------------- ----------                --基于loggiing模式,创建索引产生的redo size 为221600-1140=220460
        redo size          221600
 
        SQL> alter index idx_mytest rebuild;    --重建索引
           
        SQL> select 221600 last,448132 cur,448132-221600 diff from dual;
       
              LAST        CUR      DIFF
        ---------- ---------- ----------
            221600    448132    226532  --重建索引产生的日志比直接建还要多,主要是重建过程还有一个对旧索引的删除
 
             
        SQL> alter index idx_mytest rebuild nologging; --使用nologging重建索引。
                                                --也可以在创建索引的时候直接使用nologging关键字
                                                --如:create index idx_mytest_nolog mytest_nolog(object_id) nologging
        SQL> SELECT a.name,b.value  FROM v$statname a JOIN v$mystat b ON a.statistic# = b.statistic# WHERE a.name = 'redo size';;    --查看当前的redo size
 
        NAME                VALUE
        --------------- ----------              --基于nologging日志模式重建索引产生的redo size为469160-448132=21028
        redo size          469160
 
    5.非归档模式下的LOGGING与NOLOGGING
 
        SQL> drop table mytest purge;
 
        SQL> drop table mytest_nolog purge;
       
        SQL> select log_mode,force_logging from v$database;  --切换日志到非归档模式后,下面是查询的结果
 
        LOG_MODE    FOR
        ------------ ---
        NOARCHIVELOG NO
       
        SQL> SELECT a.name,b.value  FROM v$statname a JOIN v$mystat b ON a.statistic# = b.statistic# WHERE a.name = 'redo size';;    --查看当前的redo size
 
        NAME                VALUE
        --------------- ----------
        redo size            1688
        SQL> create table mytest as select * from dba_objects;  --创建表对象,使用logging日志记录模式
 
        SQL> SELECT a.name,b.value  FROM v$statname a JOIN v$mystat b ON a.statistic# = b.statistic# WHERE a.name = 'redo size';;  --查看当前的redo size
 
        NAME                VALUE
        --------------- ----------            --使用logging日志记录模式,创建表对象之后产生的redo size 为-1688 =68548
        redo size            70236
 
        SQL> create table mytest_nolog nologging as select * from dba_objects; --创建表对象,使用nologging日志记录模式
 
        SQL> SELECT a.name,b.value  FROM v$statname a JOIN v$mystat b ON a.statistic# = b.statistic# WHERE a.name = 'redo size';;  --查看当前的redo size
 
        NAME                VALUE
        --------------- ----------            --使用nologging日志记录模式创建表对象之后产生的redo size为135464-70236=65228
 
        redo size          135464
         
    6.小结:
        使用logging与nologging来创建对象或执行DML时
            对于非归档模式下,其产生的日志信息(redo size)相差的并不大
            对于归档模式下,logging模式产生的日志将远远大于使用nologging模式产生的日志量

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b3c171aefd37eabcce8dcb1fca4519f3.html