`
liwenshui322
  • 浏览: 520503 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle之redo分析

 
阅读更多

    作为一名开发人员,应该能够测量你的操作生成了多少redo,这往往很重要。生成的redo越多,你的操作花费的时间就越长,整个系统也会越慢。你不光在影响你自己的会话,还会影响每一个会话。redo管理是数据库中的一个串行点。任何Oracle实例都只有一个LGWR,最终所有事务都会归于LGWR,要求这个进程管理它们的redo,并BOMMIT其事务,LGWR要做的越多,系统就会越慢。通过查看一个操作会生成多少redo,并对一个问题的多种解决方法进行测试,可以从中找出最佳的方法。

 

 

    1. 测量redo

    以下示例只是测试简单的sql语句。

 

    a. 建立两个脚本mystat.sql与mystat2.sql

 Mystat.sql内容如下:

 set verify off

 column value new_val V

 define S="&1"

 set autotrace off

 select a.name, b.value

 from v$statname a, v$mystat b

 where a.statistic# = b.statistic#

 and lower(a.name) like '%' || lower('&S')||'%'

 / 

 Mystat2.sql内容如下:

 set verify off

 select a.name, b.value V, to_char(b.value-&V,'999,999,999,999') diff

 from v$statname a, v$mystat b

 where a.statistic# = b.statistic#

 and lower(a.name) like '%' || lower('&S')||'%'

 /

<!--EndFragment-->

 

 

<!--EndFragment--><!--EndFragment-->

<!--EndFragment-->

 

 

       b.  以dba身份登录数据库,比如:ob37/ob37 as sysdba

 

    c. 创建一个测试表T:

    create table t

    as

    select a.*

    from all_objects a

    where a.data_object_id=258 (258能够唯一区分出a表里面的一条记录,这里只是为了创建一个和a表字段完全一样的表,先插入一条记录。)

 

    d. 运行如下命令:@mystat redo size(注意在用命令sqlplus登录数据库的时候,cmd的路径需要切换到mystat.sql与mystat2.sql的目录下面)

 

    e. 运行如下命令:insert into t select * from all_objects

 

    f. 运行如下命令:@mystat2 ,总体运行结果如下:


  
  

<!--EndFragment-->

     2. 我能关掉重做日志文件吗

    这个问题经常被问到。答案很简单:不能。因为重做日志对于数据库至关重要;它不是开销,不是浪费。不论你是否相信,重做日志对你来说确确实实必不可少。这是无法改变的事实,也是数据库采用的工作方式。如果你真的“关闭了redo”,那么磁盘驱动器的任何暂时失败、掉电或每个软件崩溃都会导致整个数据库不可用,而且不可恢复。不过需要指出,有些情况下执行某些操作时确实可以不生成重做日志。

    

     a. 在SQL语句中设置NOLOGGING

     有些SQL语句和操作支持使用NOLOGGING子句。这并不是说:这个对象的所有操作在执行时都不生成重做日志,而是说有些特定操作生成的redo会比平常(即不使用NOLOGGING子句时)少得多。

      比如这两条创建表SQL语句:

      create table t as select * from all_objects;

      create table t nologging as select * from all_objects;

      第一条语句会生成5.5M左右的redo信息,而第二条语句只会生成80KB左右(在我的电脑上测试的结果)

      看起来redo信息少多了,但是必须非常谨慎使用这种模式。因为你一旦以这种模式创建了一个表,那么对这个表的修改,删除,更新操作虽然会计入重做日志文件,但是初始数据没有记录在里面。一旦数据发生崩溃,无法从归档的重做日志文件恢复这个表的所有数据。

 

     b. 在索引上设置NOLOGGING

     可以把一个索引或表修改为默认采用NOLOGGING模式。这说明,以后重建这个索引不会生成日志。

     比如:

     create index t_idx on t(object_name);

     alter index t_idx rebuild;  //这条语句生成了2.2Mredo

    

     alter index t_idx nologging;

     alter index t_idx rebuild; //这条语句生成61KBredo

但是,现在这个索引没有得到保护(unprotected),如果它所在的数据文件失败而必须从一个备份恢复,我们就会丢失这个索引数据。

 

     c. NOLOGGING总结

     可以采用NOLOGGING模式执行以下操作:

     1. 索引的创建和ALTER(重建)。

     2. LOB操作(对大对象的更新不必生成日志)。

     3. 通过CREATE TABLE AS SELECT创建表。

     4. 各种ALTER TABLE操作,如MOVE和SPLIT。

     在一个ARCHIVELOG模式的数据库上,如果NOLOGGING使用得当,可以加快许多操作的速度,因为它能显著减少生成的重做日志量。假设你有一个表,需要从一个表空间移到另一个表空间。可以适当地调度这个操作,让它在备份之后紧接着发生,这样就能把表ALTER为NOLOGGING模式,移到表,创建索引(也不生成日志),然后再把表ALTER回LOGGING模式。当然,要想适当地使用这个特性,需要DBA的参与,或者必须与负责数据库备份和恢复(或任何备用数据库)的人沟通。

   



 

<!--EndFragment--><!--EndFragment-->
  • 大小: 18.9 KB
分享到:
评论

相关推荐

    Redo Log之一:理解Oracle redo log

    总体来说,Oracle redo log不仅是数据恢复的关键,它还是数据一致性、日志管理以及数据库性能优化的一个基础,对数据库管理员(DBA)来说,深入了解redo log的工作原理和管理方法是必备技能之一。

    Oracle数据库性能分析

    ### Oracle数据库性能分析 #### 一、Oracle体系结构 Oracle数据库是一个复杂且功能强大的关系型数据库管理系统(RDBMS),其核心组件包括实例和数据库文件。理解Oracle的体系结构对于优化性能至关重要。 - **实例**...

    Oracle工作总结——日志文件切换频率的调整

    2. **增加日志组数量**:增加redo log group的数量,可以在一组日志文件写满时无缝切换到下一组,这样可以分散I/O负载并提高系统并发处理能力。每个日志组应保持相同大小,以确保均衡使用。 在给出的部分内容中,...

    介绍Oracle redo log 恢复步骤的文档

    在Oracle数据库系统中,Redo Log机制是确保数据一致性和可靠性的关键组件之一。它记录了所有对数据库所做的更改,以便在出现故障时能够进行恢复操作。本文档将详细介绍Oracle Redo Log的工作原理以及如何利用Redo ...

    Oracle redo 异常暴增 日志挖掘 logminer

    Logminer是Oracle提供的一种工具,用于分析Redo日志内容,帮助数据库管理员了解数据库的运行状况,排查问题。 日志挖掘Logminer的基本使用步骤包括: 1. 启动Logminer:通过`DBMS_LOGMNR`包中的`ADD_LOGFILE`、`...

    Oracle 内存全面分析 PDF文档

    这份名为"Oracle 内存全面分析"的PDF文档深入探讨了Oracle内存架构的各个方面,对于DBA(数据库管理员)和开发人员来说,理解这些知识至关重要。 Oracle内存主要由两大部分构成:System Global Area (SGA) 和 ...

    ORACLE DBA 助手DBMS_LOGMNER 界面操作工具 (ORACLE 重做日志分析工具)

    也许你还是个新人,需要查看大量网上资源或参考手册,才知道如何下手分析 ORACLE的重做日志 redo log 或归档日志。 鉴于以上的种种不便,在下对LOGMNER程序包,进行了封装,方便大量使用ORACLE 强大的日志分析工具...

    oracle内存全面分析

    ### Oracle内存全面分析 Oracle数据库的性能在很大程度上取决于其内存管理策略,特别是对系统全局区域(SGA)和程序全局区域(PGA)的优化。本文将深入探讨Oracle内存架构的关键组成部分及其对数据库性能的影响。 ...

    oracle日志分析工具LogMiner使用.

    Oracle 日志分析工具 LogMiner 使用 Oracle 日志分析工具 LogMiner 是 Oracle 数据库中的一种功能强大且灵活的日志分析工具,它可以帮助数据库管理员、开发人员和用户快速地对数据库进行日志分析和问题诊断。下面是...

    oracle awr报告分析

    ### Oracle AWR 报告分析 #### 一、概述 Oracle Automatic Workload Repository (AWR) 报告是一种用于诊断数据库性能问题的强大工具。通过分析这些报告中的数据,管理员能够了解数据库的工作负载特性、资源使用...

    Oracle备份恢复-redo文件损坏的各种场景恢复专题.docx

    Oracle数据库的恢复过程是数据库管理中的重要环节,特别是在redo文件损坏的情况下,恢复策略显得尤为重要。redo日志文件存储了数据库事务的所有更改信息,是保证数据一致性和完整性的关键组件。以下将详细介绍根据...

    深入分析oracle日志文件

    深入分析 Oracle 日志文件 Oracle 日志文件是 Oracle 数据库管理员 (DBA) 实现数据库恢复和追踪用户操作的重要工具。通过分析 Oracle 日志文件,可以追踪用户的恶意操作、恢复误删除的数据、执行事后审计等。Oracle...

    REDO文件block损坏的解决方法

    在Oracle数据库管理中,遇到REDO文件block损坏的情况是一种较为复杂且紧急的问题,尤其是在Oracle 8版本中。本文将详细解析此类问题的成因、影响以及解决方案,旨在为数据库管理员提供一套行之有效的应对策略。 ###...

    ORACLE内存全面分析(整理版)

    ### ORACLE内存全面分析 #### Oracle内存架构概览 Oracle的内存管理是其高效运行的关键因素之一,直接关联着数据库的性能与稳定性。在Oracle内存结构中,主要分为两大类:共享内存(SGA,System Global Area)和...

    Oracle.10g性能分析与优化思路

    在IT领域,数据库管理是至关重要的,而Oracle作为全球广泛使用的数据库系统之一,其性能优化对于企业业务的高效运行起着决定性作用。本主题聚焦于"Oracle.10g性能分析与优化思路",旨在深入探讨如何通过一系列技术...

    ORACLE_AWR报告详细分析

    Oracle AWR报告是Oracle数据库10g版本引入的一项重要功能,全称为Automatic Workload Repository,它主要用于监控数据库的性能,并生成详细的分析报告。AWR通过对比两次快照(snapshot)之间收集的统计信息,帮助...

    Oracle内存全面分析

    2. 重做日志缓冲区(Redo Log Buffer):存放事务更新操作产生的重做记录,等待写入重做日志文件。 3. 共享池(Shared Pool):存储PL/SQL代码、SQL语句及其解析结果、数据库链接信息等,减少重复解析。 4. Java池(Java ...

    oracle日志分析的一组文档

    这组"oracle日志分析的一组文档"提供了关于Oracle日志的深度解析,帮助我们更好地理解和处理Oracle数据库的运行情况。 1. **Oracle日志类型**: Oracle数据库的日志主要分为两种:redo log(重做日志)和archive ...

    深入分析Oracle数据库日志文件.rar

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,其稳定性和高效性在业界有口皆碑。日志文件在Oracle数据库系统中起着至关重要的作用,它们记录了数据库的所有更改,确保数据的安全性和可恢复性。本文将...

Global site tag (gtag.js) - Google Analytics