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支持的参与下进行,以避免出现不必要的问题。
超级会员免费看
1371

被折叠的 条评论
为什么被折叠?



