面试宝典:介绍下Oracle数据库动态性能视图 V$BACKUP_SYNC_IO

在这里插入图片描述
好的,我们将对 Oracle 19C 数据库中用于高级性能诊断的核心视图——V$BACKUP_SYNC_IO——进行极其详细的解析。这个视图是理解和管理 RMAN 备份性能的钥匙。


1. 视图概述与核心作用

V$BACKUP_SYNC_IO 动态性能视图的作用是提供关于 RMAN 备份和恢复操作中发生的每一次同步 I/O 的详细统计信息和性能指标

同步 I/O(Synchronous I/O) 是指进程发起一个 I/O 请求后,会阻塞并等待该 I/O 操作彻底完成,才能继续执行下一步操作。

核心作用可以概括为:

  • 微观性能诊断:不再是查看整个备份集的总时间,而是深入到每一个独立的 I/O 调用,精确到毫秒级的速度、等待时间和效率。
  • 瓶颈定位:准确判断性能瓶颈是出现在读取端(从数据文件/归档日志读取)、写入端(向备份片写入),还是由系统 I/O 子系统本身(如磁盘慢、网络延迟高)引起的。
  • 问题排查:识别低效的 I/O 操作,例如大量的短时 I/O(SHORT_WAITS)或异常长的等待(LONG_WAITS),这可能表明配置不当(如缓冲区大小不合理)。
  • 优化验证:验证对 DB_FILE_DIRECT_IO_COUNTBACKUP_TAPE_IO_SLAVES 等参数调整后的实际效果。

2. 使用场景

  1. 备份/恢复速度缓慢调查
    当 RMAN 作业耗时异常时,查询此视图可以计算出精确的平均读取和写入速率(MB/s),直接判断是源存储、目标存储还是网络成为瓶颈。

  2. 优化 RMAN 配置
    通过分析 SHORT_WAITSLONG_WAITS 的比例以及平均 I/O 大小,可以决定是否需要调整 DB_FILE_DIRECT_IO_COUNT 参数以增大每次 I/O 操作的数据量,减少系统调用次数。

  3. 识别资源争用
    查看 EFFECTIVE_BYTES_PER_SECOND 并与理论带宽对比,可以判断备份操作是否正在与其它应用激烈争用 I/O 资源。

  4. 诊断特定备份片问题
    如果某个备份片创建时间特别长,可以通过 HANDLE 字段过滤出该备份片的所有 I/O 操作,进行单独分析。


3. 字段详细含义

此视图字段众多,以下是对关键字段的详细解释:

字段名数据类型含义说明
SIDNUMBER执行该 I/O 操作的服务器进程的标识符。可用于与 V$SESSIONV$PROCESS 关联。
SEQNUMBER同一个会话 (SID) 中 I/O 操作的序列号,用于区分同一会话内的多次 I/O。
TYPEVARCHAR2(13)I/O 操作的类型
AGGREGATE : 汇总行(通常是所有操作的合计)
INPUT : 读取操作(从数据文件、归档日志等源读取)
OUTPUT : 写入操作(向备份片或镜像拷贝写入)
STATUSVARCHAR2(8)I/O 操作的状态
IN PROGRESS : 正在进行中
FINISHED : 已完成
MERGE COMPLETE : (用于增量备份合并)
FILETYPEVARCHAR2(9)正在备份的文件类型
DATAFILE
ARCHIVELOG
SPFILE
CONTROLFILE
FILENO / BLOCKNONUMBER对于 DATAFILE 类型,这是文件号起始块号
BUFFER_SIZENUMBER用于此 I/O 操作的缓冲区大小(字节)
BUFFERSNUMBER涉及到的缓冲区数量
IO_COUNTNUMBER物理 I/O 请求的次数
READYNUMBERI/O 请求已准备就绪的次数(异步 I/O 概念,在此视图中意义不大)。
SHORT_WAITSNUMBER进程为完成 I/O 而经历的短等待事件的次数。
LONG_WAITSNUMBER进程为完成 I/O 而经历的长等待事件的次数。
BYTESNUMBER此 I/O 操作传输的总字节数
OPEN_TIME / CLOSE_TIMEDATEI/O 操作开始结束的时间。
ELAPSED_TIMENUMBERI/O 操作从开始到结束的总耗时(百分之一秒)
EFFECTIVE_BYTES_PER_SECONDNUMBER有效的吞吐率(字节/秒)。这是衡量 I/O 效率的最关键指标
DISCRETE_BYTES_PER_SECONDNUMBER离散吞吐率,通常接近于物理设备的速度。
IO_CUR_RATENUMBER当前 I/O 速率(字节/秒)。
MAXIO_CUR_RATENUMBER最大当前 I/O 速率(字节/秒)。
DEVICE_TYPEVARCHAR2(17)I/O 设备类型 (DISK, SBT_TAPE)。
HANDLEVARCHAR2(513)对于 OUTPUT 类型,这是备份片的文件名;对于 INPUT 类型,这是源数据文件的路径
MEDIAVARCHAR2(80)介质名称(主要用于磁带)。

4. 相关视图与基表

  • 姊妹视图

    • V$BACKUP_ASYNC_IO:这是 V$BACKUP_SYNC_IO异步版本绝大多数情况下,RMAN 会优先使用异步 I/O 以获得最佳性能。只有当异步 I/O 不可用或被禁用时,才会使用同步 I/O。两个视图的结构几乎完全相同,是性能分析时必须同时关注的对象。
    • V$BACKUP_SET, V$BACKUP_PIECE, V$BACKUP_DATAFILE:这些视图提供备份的元数据信息,可以通过 SIDHANDLEV$BACKUP_SYNC_IO 关联,从而将性能数据与具体的备份对象联系起来。
  • **底层基表(X表)∗∗:‘V表)**: `V表)VBACKUP_SYNC_IO的数据来源于 SGA 中专门用于跟踪 RMAN I/O 操作的**内存数据结构**。其底层关联的 **X$表**(如可能存在的XKCCBI‘或类似结构)是∗∗不公开∗∗的。这些表实时记录每个通道进程发起的I/O请求和完成状态。∗∗重要警告∗∗:严禁直接查询XKCCBI` 或类似结构)是**不公开**的。这些表实时记录每个通道进程发起的 I/O 请求和完成状态。 **重要警告**:严禁直接查询 XKCCBI或类似结构)是不公开的。这些表实时记录每个通道进程发起的I/O请求和完成状态。重要警告:严禁直接查询X 表。


5. 相关底层详细原理

  1. 同步 I/O 流程

    • 发起请求:RMAN 通道进程准备好一个缓冲区(Buffer),然后发起一个 read()write() 系统调用。
    • 进程阻塞:进程立即被操作系统置入睡眠(Sleep)状态,等待内核完成底层的 I/O 操作。
    • I/O 完成:磁盘控制器或网络将数据读取到内存或发送完毕后,内核唤醒睡眠的进程。
    • 进程继续:进程从系统调用中返回,继续执行下一个操作(如处理数据或准备下一个缓冲区)。
  2. 数据收集
    Oracle 内核在 RMAN 进程发起和完成每一个同步 I/O 请求时,都会在 SGA 的固定区域填充一个统计记录。这些记录包括时间戳、传输字节数、等待时间等。V$BACKUP_SYNC_IO 视图就是这些内存记录的对外窗口。

  3. 性能指标计算
    视图中的许多字段(如 EFFECTIVE_BYTES_PER_SECOND)并非直接存储,而是由 Oracle 在查询时根据基础数据(BYTES / (ELAPSED_TIME/100))动态计算出来的。


6. 相关知识点介绍

  • 同步 vs. 异步 I/O

    • 同步 I/O:简单,但性能差,因为进程需要等待。是备份性能不佳的常见原因。
    • 异步 I/O (AIO):进程发起 I/O 请求后立即返回,继续做其它工作(如处理已读入的数据),待 I/O 完成后由操作系统通知它。能极大提升吞吐量,是 Oracle 的默认和推荐模式。
  • 如何启用异步 I/O

    • 对于磁盘:通常由 FILESYSTEMIO_OPTIONS 参数控制(设置为 SETALLASYNCH)。
    • 对于磁带:通常由 BACKUP_TAPE_IO_SLAVES 参数控制(设置为 TRUE)。
    • 如果平台不支持 AIO,或上述参数未正确设置,RMAN 会自动降级使用同步 I/O。
  • 直接 I/O (Direct I/O)
    RMAN 始终使用直接 I/O,绕过操作系统缓冲区缓存,以避免污染缓存并保证性能的一致性。DB_FILE_DIRECT_IO_COUNT 参数影响 RMAN 每次 I/O 操作的大小。


7. 常用查询 SQL

1. 查看当前正在进行的同步 I/O 操作(实时监控):

SELECT sid, type, filetype, filename, buffers, buffer_size,
       bytes, elapsed_time, effective_bytes_per_second
FROM v$backup_sync_io
WHERE status = 'IN PROGRESS';

2. 分析已完成备份操作的 I/O 效率(性能诊断):

-- 按操作类型(INPUT/OUTPUT)汇总,这是最关键的诊断查询
SELECT type,
       SUM(bytes) total_bytes,
       SUM(elapsed_time) total_hundredths_sec,
       ROUND(SUM(bytes) / (SUM(elapsed_time)/100) / 1024/1024, 2) avg_throughput_mb_sec,
       SUM(short_waits) short_waits,
       SUM(long_waits) long_waits,
       ROUND(SUM(bytes) / SUM(io_count), 2) avg_io_size
FROM v$backup_sync_io
WHERE status = 'FINISHED'
GROUP BY type;

3. 查找效率低下的备份片(针对性优化):

-- 对于OUTPUT操作,低吞吐率可能意味着目标存储是瓶颈
SELECT handle, device_type,
       ROUND(bytes/1024/1024,2) size_mb,
       elapsed_time/100 elapsed_sec,
       ROUND((bytes/(elapsed_time/100))/1024/1024,2) throughput_mb_sec
FROM v$backup_sync_io
WHERE type = 'OUTPUT'
AND status = 'FINISHED'
ORDER BY throughput_mb_sec ASC; -- 找出速率最慢的写入操作

4. 检查平均 I/O 大小,以调整参数:

-- 如果平均I/O大小远小于 DB_FILE_DIRECT_IO_COUNT,说明有很多小I/O,可能需调整
SELECT type,
       ROUND(AVG(io_count), 2) avg_io_count,
       ROUND(AVG(bytes), 2) avg_bytes_per_io,
       ROUND(MAX(bytes), 2) max_bytes_per_io
FROM v$backup_sync_io
WHERE status = 'FINISHED'
GROUP BY type;

5. 综合查询:关联备份集和信息,进行根因分析

SELECT bs.tag, io.type, io.filetype,
       ROUND(io.bytes/1024/1024,2) io_mb,
       io.elapsed_time/100 io_sec,
       ROUND((io.bytes/(io.elapsed_time/100))/1024/1024,2) io_mb_sec,
       io.handle
FROM v$backup_sync_io io
JOIN v$backup_piece bp ON (io.handle = bp.handle)
JOIN v$backup_set bs ON (bp.set_stamp = bs.set_stamp AND bp.set_count = bs.set_count)
WHERE io.status = 'FINISHED'
AND bs.completion_time > SYSDATE - 1 -- 查看最近一天内的备份
ORDER BY io_mb_sec ASC;

通过深入理解 V$BACKUP_SYNC_IO 视图,您可以将 RMAN 性能 troubleshooting 从猜测提升到基于数据的精确分析,从而有效地解决备份和恢复过程中的性能瓶颈。

欢迎关注我的公众号《IT小Chen

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值