27、RMAN故障排除与调优指南

RMAN故障排除与调优指南

1. RMAN缓冲区概述

RMAN在备份和恢复操作中都会使用缓冲区。备份作业启动时,数据块从磁盘读取到输入缓冲区,然后写入目标位置(磁盘或磁带驱动器)。恢复备份时,内容先读入输入缓冲区,再复制到输出缓冲区,最后写入所需位置。

要检测缓冲区的分配位置和大小,可以查询视图 V$SESSTAT V$STATNAME 。以下示例展示了全量数据库备份时缓冲区使用的PGA内存:

SQL>  SELECT s.sid, n.name , s.value/1024/1024 session_pga_mb
  2   FROM   v$statname n, v$sesstat s
  3   WHERE  s.sid = (SELECT sess.SID
  4                   FROM   V$PROCESS p, V$SESSION sess
  5                   WHERE  p.ADDR = sess.PADDR
  6                   AND    CLIENT_INFO LIKE '%rman%')
  7   AND    n.name = 'session pga memory'
  8*  AND    s.statistic# = n.statistic#

输出结果如下:
| SID | NAME | SESSION_PGA_MB |
| ---- | ---- | ---- |
| 39 | session pga memory | 23.0314026 |

这里,SID 39对应的通道用于执行备份,可见内存分配在PGA中。此外, V$SGASTAT 视图可用于查看为缓冲区分配的PGA内存,也能查看为大池或共享池分配的内存量。

2. 输入和输出缓冲区的数量与大小

缓冲区的大小和数量取决于备份类型(备份集或镜像副本),以及备份的文件数量。对于备份集类型的备份,输入缓冲区的分配取决于多路复用,即一个RMAN通道同时能读取的文件数量。多路复用级别由参数 MAXOPENFILES (默认值为8)和 FILESPERSET (默认值为64)配置,其计算公式为:

Multiplexing = Min (MAXOPENFILES, FILESPERSET)

当使用多节备份时,RMAN不使用多路复用。

以下表格展示了磁盘设备类型和备份集类型下,多路复用级别与输入磁盘缓冲区大小的关系:
| 多路复用级别 | 输入磁盘缓冲区大小 |
| ---- | ---- |
| >= 4 | 1个缓冲区大小 = 1 MB,每个通道总缓冲区大小 = 16 MB |
| > 4 但 < 8 | 1个缓冲区大小 = 512 KB,每个通道总缓冲区大小 = 16 MB |
| > 8 | 每个通道总缓冲区大小 = 512 KB,包含4个缓冲区(每个128 KB) |

例如,若配置一个备份通道, MAXOPENFILES = 4 FILESPERSET = 4 ,多路复用级别为4,每个文件将分配4个1 MB大小的缓冲区,通道总缓冲区大小为16 MB。

如果使用ASM作为存储类型,输入缓冲区的数量将基于磁盘组的分配单元(AU)大小和其中的物理磁盘数量。例如,一个包含4个磁盘的磁盘组 DATA ,输入缓冲区数量为4。

输出缓冲区的数量和大小会根据不同因素而变化:
- 基于磁盘的备份 :输出缓冲区数量为4,大小为1 MB,每个通道总缓冲区大小为4 MB。
- 磁带备份 :输出缓冲区数量为4,大小为256 KB。若使用单个通道通过磁带驱动器进行备份,输出缓冲区总大小为4 * 256 KB * 1 = 1024 KB。
- 恢复操作 :无论是从备份集还是镜像副本恢复,输出缓冲区大小设置为1 MB,数量设置为4。

3. 同步和异步I/O模式

I/O是备份或恢复作业中最重要的组成部分,同步和异步I/O模式对性能有很大影响。

  • 同步I/O :进程请求操作系统执行I/O操作时,必须等待操作系统的确认才能进行其他工作。例如, DBWR 进程完成检查点时将脏缓冲区写入磁盘,若没有操作系统的响应,它将处于空闲状态,导致操作变慢,因此同步I/O模式通常被认为较慢。
  • 异步I/O :发出I/O请求的服务器进程无需等待确认,可继续执行其他任务。当确认信息到达时,进程接收信息,从而使进程几乎一直处于工作状态。如今,大多数操作系统原生支持异步I/O。在Linux系统中,可参考MOS文档370579.1和237299.1确认异步I/O是否配置并正常工作。对于原始卷,异步I/O默认启用。若将快速恢复区(FRA)配置在ASM磁盘组上,由于ASM基于SAME原则,它会自动使用异步I/O。从数据库角度看,Oracle数据库将 DISK_AYNCH_IO (磁盘)和 TAPE_ASYNCH_IO (磁带驱动器)参数默认设置为 TRUE 。若异步I/O默认正常工作,无需更改这些参数。

不同操作系统的异步I/O配置方法不同,Linux系统可参考特定MOS文档,其他操作系统需参考其具体文档。

若操作系统不支持异步I/O,在磁盘备份时可使用 DBWR_IO_SLAVES 参数模拟类似I/O行为。该参数可为 DBWR 进程分配多个I/O从属进程,虽不如分配多个 DBWR 进程快,但能在一定程度上提高性能,这些I/O从属进程的内存从SGA分配。若操作系统支持异步I/O,建议分配多个 DBWR 进程。

对于磁带驱动器,磁带管理软件和硬件性能共同影响性能。由于磁带的I/O模式始终是同步的,若要模拟异步I/O行为,可将 BACKUP_TAPE_IO_SLAVES 参数设置为 TRUE ,此时每个磁带驱动器会使用一个I/O从属进程进行读写操作;若设置为 FALSE (默认值),则使用默认的同步I/O模式。

4. 大池内存设置

使用同步I/O时,内存分配在SGA的共享池或大池中。建议通过设置 LARGE_POOL_SIZE 参数为大池分配内存缓冲区,而非使用共享池,原因如下:
- 共享池以5千位块分配内存,若找不到可用的5千位块空闲内存,会抛出 ORA - 4031 错误,而大池不会出现此问题。
- 共享池的最近最少使用(LRU)算法比大池更激进地刷新内存,且共享池是许多其他数据结构的存储库,不应被RMAN内存缓冲区的额外内存填满。

大池的合适值可通过以下公式计算:

LARGE_POOL_SIZE = 分配的通道数 * (16 MB + (4 * 磁带缓冲区大小))

若使用磁带驱动器,磁带缓冲区大小设置为256 KB。例如,对于4个磁带驱动器,通道数为4,每个通道输出缓冲区值为1 MB,大池总大小应为4 * (16 + 4) = 80 MB。若修改磁带缓冲区大小,需重新计算大池值。对于磁盘缓冲区,公式中使用磁带缓冲区的值,假设为4个磁盘,大池值应为64 MB。若大池未设置到所需限制,仍会报告 ORA - 4031 错误。

建议配置自动内存管理(AMM),让数据库根据工作负载为共享池和大池设置最佳大小。若使用Oracle Database 10g,也可使用自动共享内存管理(ASMM)。

需要注意的是,仅设置大池参数可能不会使其被使用,大池仅在以下条件满足时才会被使用:
- DBWR_IO_SLAVES 设置为非零值。
- BACKUP_TAPE_IO_SLAVES 设置为 TRUE
- DISK_ASYNCH_IO 设置为 FALSE

若不满足这些条件,即使配置了大池,仍会使用共享池,若共享池没有足够的空闲内存,操作将收到 ORA - 4031 错误。

5. 使用字典视图监控RMAN I/O性能

为监控RMAN备份和恢复作业的性能,检查内存缓冲区的大小和数量,Oracle根据I/O模式使用不同视图:
- 异步I/O :使用 V$BACKUP_ASYNC_IO 视图。
- 同步I/O :使用 V$BACKUP_SYNC_IO 视图。

这两个视图可帮助识别I/O相关的瓶颈,包含以下几类行:
- 每个数据文件的读写行。
- 每个备份片的读写行。
- 一个汇总的数据文件行,用于总体性能统计。

以下是 V$BACKUP_ASYNC_IO 视图的示例输出:

SQL>  SELECT type, status, filename, buffer_size, buffer_count
 2    FROM   v$backup_async_io  WHERE type <> 'AGGREGATE'  
 3    AND    status = 'IN PROGRESS';

输出结果如下:
| TYPE | STATUS | FILENAME | BUFFER_SIZE | BUFFER_COUNT |
| ---- | ---- | ---- | ---- | ---- |
| INPUT | IN PROGRESS | +DATA/orcl/datafile/system.256.737196671 | 1048576 | 4 |
| OUTPUT | IN PROGRESS | +DATA/orcl/backupset/2013_06_12/nnndf0_tag20130612t153821_0.273.8179701 | 1048576 | 4 |

从输出可以看出,系统表空间备份时,输入和输出都分配了4个1 MB大小的缓冲区。

虽然这两个视图包含多个列,但确定I/O性能时,部分列更有用,完整列列表可参考Oracle文档(http://www.oracle.com/pls/db121/homepage)。

6. 具体视图分析
  • V$BACKUP_ASYNC_IO(异步I/O) :使用异步I/O时,I/O相关作业的输出记录在 V$BACKUP_ASYNC_IO 视图中。该视图在备份或恢复作业进行时收集信息。测量I/O性能时,应关注以下5列:
  • IO_COUNT :文件执行的I/O总数。
  • LONG_WAITS :备份或恢复作业请求操作系统等待I/O完成的总次数。
  • SHORT_WAITS :备份或恢复作业以非阻塞模式轮询I/O完成的操作系统调用总次数。
  • SHORT_WAIT_TIME_TOTAL :非阻塞轮询I/O完成所花费的总时间(以百分之一秒为单位)。
  • LONG_WAIT_TIME_TOTAL :阻塞等待I/O完成所花费的总时间(以百分之一秒为单位)。

查询视图时,将 LONG_WAITS 列除以 IO_COUNT ,可找出读取缓慢并导致瓶颈的文件。此外, LONG_WAIT SHORT_WAIT 列应报告零等待时间。

  • V$BACKUP_SYNC_IO(同步I/O) :使用同步I/O时,使用 V$BACKUP_SYNC_IO 视图。由于同步I/O是单向的,较容易推断瓶颈。在视图中,关注 DISCRETE_BYTES_PER_SECOND 列,并将其值与设备供应商提供的值进行比较。若该列的输出值小于设备提及的值,可能需要进一步深入分析。

若底层设备是磁带驱动器,无论使用异步还是同步I/O,都应关注 EFFECTIVE_BYTES_PER_SECOND 列,并将其与磁带性能进行比较。该值应与磁带性能匹配或非常接近,否则可能存在额外等待,导致性能下降。

7. 查找备份和恢复瓶颈

备份或恢复作业涉及从源读取和向目标写入数据,可使用 BACKUP 命令的 VALIDATE 选项找出瓶颈所在(读取阶段还是写入阶段)。 BACKUP VALIDATE 命令仅读取源数据文件,不实际在目标设备上创建备份,因此可通过该选项测量仅读取阶段的性能,而不涉及写入阶段的开销。

  • 读取缓慢 :若使用 VALIDATE 选项的命令执行时间与实际备份时间相同,可推测读取操作缓慢,因为 BACKUP VALIDATE 的时间应约为实际备份时间的一半。可进一步关注等待比率( LONG_WAITS / IO_COUNT )较长的大文件,可能是磁盘速度慢或文件存储在磁盘内侧,导致访问速度变慢。若使用ASM,检查是否有磁盘性能不佳导致瓶颈,必要时可对ASM磁盘组进行重新平衡。
  • 写入缓慢 :若 BACKUP 命令执行时间明显长于 BACKUP VALIDATE ,说明在将数据复制到缓冲区和/或写入磁盘时存在等待或瓶颈。此时,根据备份目标(磁盘或磁带)采取不同的故障排除措施:
  • 磁盘 :尝试使用高级压缩设置代替基本压缩,以获得更高的压缩比,减少备份数据量。若配置了加密,可尝试使用如AES128等算法。
  • 磁带驱动器 :参考后续章节的相关内容。

若确认介质工作正常,可能需要调整内存缓冲区的配置,这可能涉及使用一些未公开的参数显式更改缓冲区的大小和数量,此操作建议在Oracle支持的参与下进行。

8. 调优SBT(磁带)性能

磁带驱动器涉及多个因素,且可能不是主机数据库的直接组件,DBA可调整的空间有限。但从数据库方面或使用Oracle Secure Backup(OSB)时,有以下几点建议:
- 配置并行性时,将磁带(SBT)通道数量设置为配置中的磁带驱动器数量。
- RMAN会自动过滤数据文件中的未使用块,不将其包含在备份中。若使用OSB备份磁带驱动器,未提交事务的撤销数据也不会包含在备份中。
- 使用OSB可利用Linux直接I/O,通过直接内存访问(DMA)显著降低CPU消耗。

OSB是一个可单独下载和安装的工具,可从http://www.oracle.com/goto/osb 下载,本文不详细介绍OSB。

若不使用OSB作为介质管理软件,可从以下配置方面提高磁带驱动器性能:
- 网络吞吐量 :表示底层网络可传输的数据量,当磁带驱动器远程连接到其他主机时,该因素可能对性能影响最大。
- 原生传输速率 :不涉及压缩时写入磁带的速度,聚合总传输速率的上限应与所有磁带驱动器的整体性能匹配。
- 磁带压缩 :由介质管理软件提供的压缩功能。若能获得良好的压缩比,备份速率也会较好。若磁带压缩性能可接受,不建议同时使用RMAN的二进制压缩。
- 磁带流式传输 :当磁盘、网络和CPU的数据传输速率与磁带的原生传输速率匹配或更高时,会发生磁带流式传输。若不满足条件且磁带缓冲区中无数据可写入介质,磁带会前进,需要倒回到写入停止的位置。为控制此行为,确保流式传输不中断或使用不同速度的磁带驱动器。
- 物理磁带块大小 :由介质管理软件设置,该值越大,备份速度越好。可使用 CONFIGURE ALLOCATE 命令的 BLKSIZE 选项更改块大小。

RMAN故障排除与调优指南

9. 总结与操作指南

为了更清晰地梳理RMAN的调优与故障排除要点,下面以流程图和操作步骤的形式进行总结。

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px

    A([开始]):::startend --> B{I/O模式}:::decision
    B -->|异步| C(使用V$BACKUP_ASYNC_IO视图监控):::process
    B -->|同步| D(使用V$BACKUP_SYNC_IO视图监控):::process
    C --> E{查找瓶颈}:::decision
    D --> E
    E -->|读取慢| F(检查大文件等待比率):::process
    E -->|写入慢| G{备份目标}:::decision
    F --> H{使用ASM?}:::decision
    H -->|是| I(检查磁盘性能并考虑重新平衡):::process
    H -->|否| J(检查磁盘速度和文件位置):::process
    G -->|磁盘| K(尝试高级压缩和合适加密算法):::process
    G -->|磁带| L(参考磁带性能调优):::process
    I --> M(调整内存缓冲区配置):::process
    J --> M
    K --> M
    L --> M
    M --> N([结束]):::startend

以下是具体的操作步骤:
1. 确定I/O模式
- 若使用异步I/O,通过 V$BACKUP_ASYNC_IO 视图监控RMAN I/O性能。
- 若使用同步I/O,通过 V$BACKUP_SYNC_IO 视图监控RMAN I/O性能。
2. 查找瓶颈
- 使用 BACKUP VALIDATE 命令区分是读取阶段还是写入阶段出现瓶颈。
- 若读取缓慢,进一步关注等待比率( LONG_WAITS / IO_COUNT )较长的大文件。
- 若使用ASM,检查是否有磁盘性能不佳导致瓶颈,可进行重新平衡操作。
3. 针对不同备份目标处理写入瓶颈
- 磁盘 :尝试使用高级压缩设置代替基本压缩,若配置了加密,尝试使用如AES128等算法。
- 磁带驱动器 :参考磁带性能调优的相关内容。
4. 调整内存缓冲区配置
- 若确认介质工作正常,可在Oracle支持的参与下,使用一些未公开的参数显式更改缓冲区的大小和数量。

9.1 磁带性能调优操作步骤

若要对磁带性能进行调优,可按照以下步骤进行:
1. 配置并行性 :将磁带(SBT)通道数量设置为配置中的磁带驱动器数量。
2. 利用RMAN特性 :RMAN会自动过滤数据文件中的未使用块,不将其包含在备份中。若使用OSB备份磁带驱动器,未提交事务的撤销数据也不会包含在备份中。
3. 使用OSB :若使用OSB,可利用Linux直接I/O,通过直接内存访问(DMA)显著降低CPU消耗。可从http://www.oracle.com/goto/osb 下载OSB。
4. 非OSB情况下的配置调整
- 网络吞吐量 :确保底层网络可传输的数据量满足需求,尤其是磁带驱动器远程连接到其他主机时。
- 原生传输速率 :保证聚合总传输速率的上限与所有磁带驱动器的整体性能匹配。
- 磁带压缩 :使用介质管理软件提供的压缩功能,若能获得良好的压缩比,可不使用RMAN的二进制压缩。
- 磁带流式传输 :确保磁盘、网络和CPU的数据传输速率与磁带的原生传输速率匹配或更高,避免磁带前进后需要倒回。
- 物理磁带块大小 :使用 CONFIGURE ALLOCATE 命令的 BLKSIZE 选项更改块大小,以提高备份速度。

9.2 大池内存设置操作步骤

设置大池内存时,可按以下步骤进行:
1. 计算大池合适值 :使用公式 LARGE_POOL_SIZE = 分配的通道数 * (16 MB + (4 * 磁带缓冲区大小)) 计算大池的合适值。若使用磁带驱动器,磁带缓冲区大小设置为256 KB。
2. 配置内存管理
- 建议配置自动内存管理(AMM),让数据库根据工作负载为共享池和大池设置最佳大小。
- 若使用Oracle Database 10g,也可使用自动共享内存管理(ASMM)。
3. 确保大池被使用 :确保满足以下条件,大池才会被使用:
- DBWR_IO_SLAVES 设置为非零值。
- BACKUP_TAPE_IO_SLAVES 设置为 TRUE
- DISK_ASYNCH_IO 设置为 FALSE

10. 总结

RMAN的备份和恢复作业性能受到多个因素的影响,包括I/O模式、内存缓冲区的配置、磁带设备的性能等。通过合理配置参数、监控性能指标以及采取相应的调优措施,可以有效提高RMAN作业的性能,减少备份和恢复时间,确保数据库的安全性和可用性。在实际操作中,应根据具体的环境和需求,灵活运用上述方法进行故障排除和性能调优。同时,对于一些复杂的操作,如调整内存缓冲区配置,建议在Oracle支持的参与下进行,以避免出现不必要的问题。

【事件触发一致性】研究多智能体网络如何通过分布式事件驱动控制实现有限时间内的共识(Matlab代码实现)内容概要:本文围绕多智能体网络中的事件触发一致性问题,研究如何通过分布式事件驱动控制实现有限时间内的共识,并提供了相应的Matlab代码实现方案。文中探讨了事件触发机制在降低通信负担、提升系统效率方面的势,重点分析了多智能体系统在有限时间收敛的一致性控制策略,涉及系统模型构建、触发条件设计、稳定性收敛性分析等核心技术环节。此外,文档还展示了该技术在航空航天、电力系统、机器人协同、无人机编队等多个前沿领域的潜在应用,体现了其跨学科的研究价值和工程实用性。; 适合人群:具备一定控制理论基础和Matlab编程能力的研究生、科研人员及从事自动化、智能系统、多智能体协同控制等相关领域的工程技术人员。; 使用场景及目标:①用于理解和实现多智能体系统在有限时间内达成一致的分布式控制方法;②为事件触发控制、分布式化、协同控制等课题提供算法设计仿真验证的技术参考;③支撑科研项目开发、学术论文复现及工程原型系统搭建; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,重点关注事件触发条件的设计逻辑系统收敛性证明之间的关系,同时可延伸至其他应用场景进行二次开发性能化。
【四旋翼无人机】具备螺旋桨倾斜机构的全驱动四旋翼无人机:建模控制研究(Matlab代码、Simulink仿真实现)内容概要:本文围绕具备螺旋桨倾斜机构的全驱动四旋翼无人机展开,重点研究其动力学建模控制系统设计。通过Matlab代码Simulink仿真实现,详细阐述了该类无人机的运动学动力学模型构建过程,分析了螺旋桨倾斜机构如何提升无人机的全向机动能力姿态控制性能,并设计相应的控制策略以实现稳定飞行精确轨迹跟踪。文中涵盖了从系统建模、控制器设计到仿真验证的完整流程,突出了全驱动结构相较于传统四旋翼在欠驱动问题上的势。; 适合人群:具备一定控制理论基础和Matlab/Simulink使用经验的自动化、航空航天及相关专业的研究生、科研人员或无人机开发工程师。; 使用场景及目标:①学习全驱动四旋翼无人机的动力学建模方法;②掌握基于Matlab/Simulink的无人机控制系统设计仿真技术;③深入理解螺旋桨倾斜机构对飞行性能的影响及其控制实现;④为相关课题研究或工程开发提供可复现的技术参考代码支持。; 阅读建议:建议读者结合提供的Matlab代码Simulink模型,逐步跟进文档中的建模控制设计步骤,动手实践仿真过程,以加深对全驱动无人机控制原理的理解,并可根据实际需求对模型控制器进行修改化。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值