`
mikixiyou
  • 浏览: 1100547 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
C3c8d188-c0ab-3396-821d-b68331e21226
Oracle管理和开发
浏览量:353636
社区版块
存档分类
最新评论

RMAN不恰当配置导致Oracle数据库备份死慢

阅读更多

这是一个发生在Oracle数据库上使用RMAN进行数据库操作因在默认配置中使用不合适的配置导致备份性能慢到不能接受的问题。

在整个问题解决过程中,涉及了存储商、网络、操作系统以及Oracle等等。解决过程复杂和艰难,甚至都开始怀疑自己了,到最后峰回路转,在RMAN备份的输出日志发现了关键信息,使得问题得以解决。

这个问题我们想复杂了。如果我们能仔细一点,多看看日志信息,就能节省很多时间和人力,就不会绕这么一个大圈子。

 

(miki西游 @mikixiyou 原文链接: http://mikixiyou.iteye.com/blog/1576408 )

1. 环境

客户的数据库系统运行在Linux Redhat系统上。数据库系统为Oracle 10.2.0.5.6,三节点RAC

数据库名称为WEBDB,归档模式运行。数据库目前大小约900GB,每天生成的归档日志量约50GB,但在最高峰时也会有100GB

数据库备份采用RMAN工具备份到挂载到服务器的磁盘上。

2. 问题

数据库备份时,每秒钟只能写入4MB左右。

如备份88号文件,该文件大小为5GB

 

RMAN> backup datafile 88 format '/u01/app/oracle/88.bk';

 

Starting backup at 14-3 -12

using channel ORA_DISK_1

channel ORA_DISK_1: starting compressed full datafile backupset

channel ORA_DISK_1: specifying datafile(s) in backupset

input datafile fno=00088 name=+DG/webdb/datafile/qlzq50.dbf

channel ORA_DISK_1: starting piece 1 at 14-3 -12

channel ORA_DISK_1: finished piece 1 at 14-3 -12

piece handle=/u01/app/oracle/88.bk tag=TAG20120314T113321 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:04:35

Finished backup at 14-3 -12

 

Starting Control File and SPFILE Autobackup at 14-3 -12

piece handle=/dbbackup/webdb/c-3243882293-20120314-04 comment=NONE

Finished Control File and SPFILE Autobackup at 14-3 -12

备份时间为435秒,备份结果集为1.1GB

多次备份测试,备份速度都是这样。

3. 分析

在新环境的10.2.0.4上的环境下,先期创建一个数据库,名称为WEBDB ,同原网站数据库名称一致。

这个数据库是新迁移的过来的,数据库版本也是新升级到10.2.0.5。以前的版本是10.2.0.4,那个时候备份并不慢。

新库和老库用的是一类服务器,同是64CPU32GB内存。新库接的存储柜子是扩展柜,而老库用的是主柜子。

我们首先分析RMAN备份过程中,会话的等待事件,发现其始终是“RMAN backup & recovery I/O”等待事件。

检查的方法是“select * from v$session_event a where a.SID=1450;”。

就是说从数据库层面看,系统在RMANIO上操作。

整个过程中,系统负载很低,很稳定。

我们再分析RMAN备份过程中的IO情况。这个从系统和数据库性能视图两个方面去分析。

一方面系统上,我们使用vmstat -1 ,iostat –m 1,结果显示系统IO很差,只有5MB每秒的写,读稍微大些,约30-40MB每秒。但不能完全达到存储正常的IO值。

经过存储工程师对存储性能的测试,证明其IO能力为每秒160MB的读,每秒120MB的写。但在RMANBACKUP备份时,这个性能从来没有出现过。

另一方面数据库上,我们查询性能系统视图,方法为“select * from v$backup_async_io where open_time >sysdate-1/2;”,发现RMAN备份的读为16MB每秒,而写为4MB每秒,很稳定。

在查询ORACLE RMAN的原理,发现在正常情况下,一个通道的RMAN IO就是这样的速度。并且,这个样写入也没消耗多少时间。(这段表述可能有误,请参考官方的RMAN_BUFFER.dbf文档)

到这个地步,从数据库的信息中,看不到备份过程在其他时间在干什么。备份的读写速度都很正常,但系统就不能快速完成备份。

这里使用的是RMAN BACKUP工具,我们又想到一种备份方法,RMAN COPY。这种COPY是单纯地拷贝文件,过程就是将ASM磁盘组上文件拷贝到文件系统上,不做任何更改。

经过测试,发现这种方法很快,在备份到本地硬盘时,5GB的文件时间只要55秒,而即使备份到存储上,时间也只要245秒。

以下是测试对照表。

RMAN copy 方式

节点3    备到本地   55

节点2    备到本地   56

节点1    备到本地   55

节点1    备到存储   245

RMAN backup 方式

节点1    备到本地   435

节点1    备到存储   435

在数据库层面上,无能为力之后,我们挖掘到更下一层,直接分析进程操作在操作系统层面都干了什么。

这里使用的是LINUX下的STRACE分析进程的工具。

此工具通用的完整用法是:

strace -o /tmp/output2.txt -T -tt -e trace=all -s 12 -p 17129

必须记住的参数:
1strace -p pid  可以跟踪某个后台进程
2
strace -o filename 把跟踪结果输出到文件
3
strace -T 记录每个系统调用花费的时间,可以看看哪个系统调用时间长
4
strace -t (或者 -tt)记录每个系统调用发生是的时间(时分秒的格式)
5
strace -s 1024 显示系统调用参数时,对于字符串显示的长度, 默认是32,如果字符串参数很长,很多信息显示不出来。
6
strace -e trace=nanosleep 只记录相关的系统调用信息。    -e trace=network // 只记录和网络api相关的系统调用
    -e trace=file // 
只记录涉及到文件名的系统调用
    -e trace=desc // 
只记录涉及到文件句柄的系统调用
    
还有其他的包括processipcsignal等。

我们将COPYBACKUP两种方式的strace结果做了分析,发现preadpwrite操作时间并没有出入。相反,BACKUP备份时,PWRITE的次数更少,但每次操作的时间没有多大出入。而最终结果却是一个55秒,一个435秒,相差有五六倍之多。

未采用的测试方法:

1、在WEBRAC环境上新搭建个数据库,测试一下是不是数据库配置导致,以判断是OS级别的配置还是DB级别的配置问题。但因为已经是生产环境而作罢。

2、调整RMAN BUFFER涉及的隐含参数。

如写的参数_db_file_direct_io_count 等。但因为是生产环境,风险大而作罢。

3、搭建测试环境,分析是不是10.2.0.5的问题。这是第一个采用10.2.0.5的项目。但客户有RYDRAC就是10.2.0.5,同样版本,但测试结果很正常,完全没有问题,虽然RYDRAC挂载的存储性能比这个存储要好一些。

RMAN BACKUP备份所消耗的时间去掉正常的读、写操作,还有读和写之间都做了什么操作?时间大部分都消耗在这读写之间的操作了。如将数据块从ASM磁盘组读取到内存中,做何种操作,再写入到文件系统磁盘中。

一度认为CPU的个数太多,会不会是超线程的问题?

一度认为这个存储是不是异步IO

 

4. 解决

在苦苦探寻RMAN BACKUP在读和写之间做了什么操作时,突然从RMAN的备份日志中发现一条有价值的信息。

其实,这个时候,应该去看RMAN的工作原理。

这个备份日志如下,仔细看:

Starting backup at 14-3 -12

using channel ORA_DISK_1

channel ORA_DISK_1: starting compressed full datafile backupset

channel ORA_DISK_1: specifying datafile(s) in backupset

input datafile fno=00088 name=+DG/webdb/datafile/qlzq50.dbf

channel ORA_DISK_1: starting piece 1 at 14-3 -12

channel ORA_DISK_1: finished piece 1 at 14-3 -12

piece handle=/u01/app/oracle/88.bk tag=TAG20120314T113321 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:04:35

Finished backup at 14-3 -12

发现关键字在这行“channel ORA_DISK_1: starting compressed full datafile backupset”,关键字就是compressed,这个channel启用了压缩机制。

检查RMAN的配置,发现disk的参数选项是这样的:

CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 1;

 

默认的disk类型的设置居然是带压缩的。

将压缩取消,修改如下:

RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;

 

old RMAN configuration parameters:

CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 1;

new RMAN configuration parameters:

CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;

new RMAN configuration parameters are successfully stored

 

5. 测试

再使用RMAN BACKUP工具测试88号文件的备份。过程如下:

RMAN> backup datafile 88 format '/u01/app/oracle/88.bk';

 

Starting backup at 14-3 -12

using channel ORA_DISK_1

channel ORA_DISK_1: starting full datafile backupset

channel ORA_DISK_1: specifying datafile(s) in backupset

input datafile fno=00088 name=+DG/webdb/datafile/qlzq50.dbf

channel ORA_DISK_1: starting piece 1 at 14-3 -12

channel ORA_DISK_1: finished piece 1 at 14-3 -12

piece handle=/u01/app/oracle/88.bk tag=TAG20120314T133447 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:45

Finished backup at 14-3 -12

 

Starting Control File and SPFILE Autobackup at 14-3 -12

piece handle=/dbbackup/webdb/c-3243882293-20120314-10 comment=NONE

Finished Control File and SPFILE Autobackup at 14-3 -12

 

RMAN>

这次备份到本地硬盘的,时间和BACKUP COPY的时间几乎一样,为45秒,备份的结果集从1.1GB涨到5GB。这是没有压缩选项的备份。备份速度为每秒110MB

这个可以解释,在读写之间的时间都消耗在压缩数据块上了。在没有压缩的备份操作过程中,系统的负载明显上升,系统出现排队堵塞的进程。这表示备份已经将IO资源基本占用。

测试一次到挂载的存储上的备份操作,如下:

RMAN> backup datafile 88 format '/test/88.bk';

 

Starting backup at 14-3 -12

using channel ORA_DISK_1

channel ORA_DISK_1: starting full datafile backupset

channel ORA_DISK_1: specifying datafile(s) in backupset

input datafile fno=00088 name=+DG/webdb/datafile/qlzq50.dbf

channel ORA_DISK_1: starting piece 1 at 14-3 -12

channel ORA_DISK_1: finished piece 1 at 14-3 -12

piece handle=/test/88.bk tag=TAG20120314T152831 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:56

Finished backup at 14-3 -12

 

Starting Control File and SPFILE Autobackup at 14-3 -12

piece handle=/dbbackup/webdb/c-3243882293-20120314-11 comment=NONE

Finished Control File and SPFILE Autobackup at 14-3 -12

 

RMAN>

时间也只要56秒,备份结果集为5GB

这个速度是每秒91MB的写入量,和存储工程师测试每秒120MB的值基本相当了,和以前的每秒4MB,提升了20倍。

6. 总结

这个性能问题,是一个非常隐蔽的不当设置导致的。

这个压缩设置,很有可能是在以前备份时,空间不够而选择设定的。当时的目的就是选择牺牲时间获取空间的方式。

在新环境下,我们使用RMAN迁移,RMAN的配置也一并迁移过来而没有察觉。随着库逐渐增大,到今天这个地步,而备份的空间又足够了,时间问题又浮现出来。

但压缩设置已经一两年前设置的,show all显示参数也很隐蔽,导致了我们从数据库分析到操作系统,从操作系统到存储,又从存储一路杀回来。其间过程之曲折,实在一言难尽。

警示:RMAN 备份 压缩机制 需要慎重使用。出现性能问题,首先检查有没有这个压缩设置。

 

 

 

3
1
分享到:
评论
2 楼 mikixiyou 2012-07-04  
kidding87 写道
从发现问题、分析问题到解决问题,一气呵成,值得学习

其间回环曲折,一言难尽
1 楼 kidding87 2012-07-04  
从发现问题、分析问题到解决问题,一气呵成,值得学习

相关推荐

    基于RMAN的Oracle数据库备份与恢复机制.pdf

    基于RMAN的Oracle数据库备份与恢复机制.pdf 本文档详细介绍了基于RMAN的Oracle数据库备份与恢复机制。Oracle Recovery Manager(RMAN)是Oracle公司提供的一种专门备份工具,能够实现数据库定制备份、自动备份等...

    windows上oracle数据库rman自动备份策略

    RMAN(Recovery Manager)是Oracle提供的一种强大的工具,专门用于数据库备份、恢复和维护。本篇将深入探讨如何利用RMAN来实现自动备份策略,并结合Windows的任务计划程序进行定时执行。 一、RMAN简介 RMAN是Oracle...

    基于Rman和TSM的Oracle数据库备份方法研究.pdf

    4. 数据调度策略的制定和配置:在基于Rman和TSM的Oracle数据库备份方案中,需要制定和配置数据调度策略,以确保数据的安全和可靠性。 5. 相应代码的编写和调试:在基于Rman和TSM的Oracle数据库备份方案中,需要编写...

    Veeam 备份恢复oracle数据库详细配置文档

    本文档详细介绍了如何使用 Veeam 备份恢复 Oracle 数据库的配置过程,从环境准备到推送 Oracle RMAN Plugin,再到创建备份作业和运行备份作业,最后实现 Oracle 数据库的异机恢复。本文档旨在帮助读者快速掌握 Veeam...

    Oracle数据库RMAN备份与恢复.pdf

    RMAN(Recovery Manager)是Oracle数据库中一个专门为备份与恢复设计的工具,它支持物理备份,并且拥有许多独特的功能,例如跳过未使用的数据块以及使用二进制压缩模式压缩数据,从而能够高效地备份和恢复数据库。...

    Oracle数据库备份和恢复利器——RMAN.pdf

    Oracle数据库备份和恢复利器——RMAN.pdf文档详细介绍了RMAN(Recovery Manager)在Oracle数据库中的应用,作为物理备份和恢复工具,RMAN具有占用资源少、备份效率高、恢复速度快、支持在线备份和恢复等特点。...

    一步一步学RMAN做oracle数据库备份与恢复

    ### RMAN 在 Oracle 数据库备份与恢复中的应用详解 #### 一、RMAN 简介及重要性 RMAN(Recovery Manager)是 Oracle 提供的一种强大的工具,用于管理和自动化 Oracle 数据库的备份、恢复以及灾难恢复过程。它不仅...

    Oracle数据库Rman备份方案

    ### Oracle数据库Rman备份方案详解 #### 一、概述 Oracle RMAN(Recovery Manager)是一种功能强大的工具,用于管理Oracle数据库的备份、恢复及灾难恢复。本文将详细介绍如何使用RMAN来制定Oracle数据库的备份策略...

    Oracle 11g R2 Rman备份与恢复_刘耀龙的博客-CSDN博客_rman备份.pdf

    Oracle 11g R2 的 RMAN (Recovery Manager) 是 Oracle 数据库管理系统中的一个关键工具,主要用于数据库的备份和恢复。RMAN 提供了一种高效且灵活的方式来管理和保护数据库,确保在数据丢失或系统故障时能够快速恢复...

    windows下的oracle数据库rman自动备份和恢复.pdf

    " oracle数据库RMAN自动备份和恢复" Oracle数据库RMAN自动备份和恢复是指使用Oracle提供的RMAN(Recovery Manager)工具来实现数据库的自动备份和恢复。RMAN是Oracle数据库的备份和恢复解决方案,可以实现数据库的...

    用RMAN进行ORACLE数据库备份的方法研究.pdf

    用RMAN进行ORACLE数据库备份的方法研究 oracle数据库备份是指将数据库中的数据复制到另外一个存储介质中,以便在数据丢失或损坏时能够恢复数据。Oracle数据库备份有两种类型:联机备份和脱机备份。联机备份也称热...

    手把手教你ORACLE RMAN异地备份

    "手把手教你ORACLE RMAN异地备份" 该教程旨在教你如何使用ORACLE RMAN实现异地备份,解决了由于数据量急剧增加、备份和恢复的困难问题。通过使用RMAN和EXP/IMP工具,用户可以实现本地数据库的异地备份,避免服务器...

    傻瓜式实战OracleRMAN数据库备份和恢复视频

    教程名称:傻瓜式实战Oracle RMAN数据库备份和恢复视频课程目录:【】数据库备份和恢复系列].ITBOBA_RMAN_1【】数据库备份和恢复系列].ITBOBA_RMAN_10【】数据库备份和恢复系列].ITBOBA_RMAN_2【】数据库备份和恢复...

    oracle 数据库备份 实例代码

    Oracle数据库是全球广泛使用...总之,Oracle数据库备份是保护数据安全的重要措施,通过RMAN等工具可以实现自动化、高效化的备份。理解备份类型、备份方法以及恢复流程,有助于企业在面临数据危机时快速有效地恢复业务。

    oracle数据库RMAN备份方案

    Oracle 数据库 RMAN 备份方案 Oracle 数据库 RMAN 备份方案是一个生产环境验证实施的备份解决方案,旨在保护 Oracle 数据库的数据安全和可用性。本方案通过使用 Oracle 的 RMAN 工具,提供了一个完整的备份和恢复...

    windows下oracle数据库备份压缩&删除历史备份.rar

    在Oracle 11g中,通常采用RMAN(恢复管理器)进行备份,因为它是Oracle提供的一个强大工具,可以执行各种类型的备份,包括完整数据库备份、表空间备份、数据文件备份等。RMAN可以通过命令行或者脚本方式运行,非常...

    Veeam Rman Plugin for Oracle安装和使用手册.docx

    RMAN(Recovery Manager)是Oracle数据库的备份和恢复工具,VEEAM Rman Plugin for Oracle是基于RMAN的备份插件。该插件可以将Oracle数据库备份到VEEAM存储库中,提供了一个可靠的数据保护解决方案。 系统兼容要求 ...

    Oracle数据库备份恢复工具

    用户无需深入了解Oracle RMAN命令,只需通过图形化的界面操作即可完成数据库的备份和恢复工作,大大降低了使用难度,提高了工作效率。 总结来说,"Oracle数据库备份恢复工具"是针对Oracle数据库管理的重要辅助工具...

    RMAN数据库备份详解

    本文详细讲解了 RMAN 的备份机制以及如何备份,涵盖了数据库备份和 RMAN 备份的概念、RMAN 备份的类型、备份集和镜像副本、备份路径、备份限制等知识点。 一、数据库备份与 RMAN 备份的概念 数据库备份是指将...

Global site tag (gtag.js) - Google Analytics