当前位置:  数据库>oracle

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

    来源: 互联网  发布时间:2017-06-23

    本文导语: Oracle数据库日志有几种模式,强制日志、非强制日志模式、对象级别等!通常在数据库模式设置强制后,余下的不管如何都会强制日志!现在我们就oracle数据库日志模式产生的日志量进行比较测试,在各种模式下日志产生的情况...

Oracle数据库日志有几种模式,强制日志、非强制日志模式、对象级别等!通常在数据库模式设置强制后,余下的不管如何都会强制日志!现在我们就oracle数据库日志模式产生的日志量进行比较测试,在各种模式下日志产生的情况!

日志记录模式的转换
      a.数据库从非强制日子模式切换到强制日志模式
          SQL>alter database force logging;   
        b.数据库从强制日志模式切换到非强制日志模式
          SQL>alter database noforce logging;
        c.表空间级别从强制日志模式切换到非强制日志模式
          SQL>alter tablespace tablespacename noforce logging;
        d.表空间级别从非强制日志模式切换到强制日志模式
          SQL>alter tablespace tablespacename force logging;
        e.对象级别日志记录模式
          SQL>alter tablet mytest nologging;    --不记录日志模式
          SQL>alter tablet mytest logging;      --采用日志记录模式
 
一、表段,索引段上使用一般DDL,DML时,LOGGING与NOLOGGING情况 
    1.查看数据库的归档模式
        有关设置日志归档模式的问题,请参考:
            Oracle 联机重做日志文件(ONLINE LOG FILE)
            Oracle 归档日志
 
        SQL> select log_mode,force_logging from v$database;
 
        LOG_MODE    FOR
        ------------ ---
        ARCHIVELOG  NO
       
        SQL> archive log list;
        Database log mode              Archive Mode
        Automatic archival            Enabled
        Archive destination            /u01/mytest/arch
        Oldest online log sequence    1024
        Next log sequence to archive  1025
        Current log sequence          1025 
       
        SQL> select tablespace_name,logging,force_logging from dba_tablespaces;
 
        TABLESPACE_NAME                LOGGING  FOR
        ------------------------------ --------- ---
        SYSTEM                        LOGGING  NO
        UNDOTBS1                      LOGGING  NO
        SYSAUX                        LOGGING  NO
        TEMP                          NOLOGGING NO
        USERS                          LOGGING  NO
        PERFSTAT                      LOGGING  NO
       

     
    2.使用如下语句进行查询
     
          SQL >SELECT a.name,b.value  FROM v$statname a JOIN v$mystat b ON a.statistic# = b.statistic# WHERE a.name = 'redo size';
 

 
    3.在归档模式下比较表段上的NOLOGGING与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';
 
        NAME                VALUE
        --------------- ----------
        redo size            1644
 
        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';
 
        NAME                VALUE
        --------------- ----------
        redo size            70064         
 
        SQL> select 1644 last,70064 as cur,(70064-1644) diff from dual;--使用nologging模式建表产生的redo size为
 
              LAST        CUR      DIFF
        ---------- ---------- ----------
              1644      70064      68420
 
        SQL> CREATE TABLE mytest LOGGING 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
        --------------- ----------           
        redo size          1344112             

        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模式产生的日志量

更多详情见请继续阅读下一页的精彩内容:


    
 
 

您可能感兴趣的文章:

  • Oracle 登录产生了01033错误
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle将字符编码从GBK转到UTF8,如何操作比较稳妥?
  • Oracle date如何比较大小分析
  • SAP ERP 与Oracle ERP 比较
  • Oracle In和exists not in和not exists的比较分析
  • Oracle与MySQL学习体会比较
  • Oracle备份功能比较
  • oracle数据库删除数据Delete语句和Truncate语句的使用比较
  • SQL Server和Oracle并行处理比较分析
  • 常见数据库系统比较 Oracle数据库
  • Oracle中spool命令实现的两种方法比较
  • c/c++开源软件 iis7站长之家
  • DB2常用函数与Oracle比较
  • Oracle与SQL Server在企业应用的比较
  • Oracle8i和Microsoft SQL Server比较
  • oracle下一条SQL语句的优化过程(比较详细)
  • DB2和 Oracle的并发控制(锁)的比较
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3