
好的,我们来对 Oracle 19C 中的 V$PROXY_COPY_DETAILS 动态性能视图进行一次全面、深入的详解。这个视图是 Oracle Recovery Manager (RMAN) 代理备份监控体系中的统一详细视图,它合并了数据和归档日志的代理备份细节。
1. 作用与概述
V$PROXY_COPY_DETAILS 动态性能视图提供了关于使用 RMAN PROXY COPY 功能备份数据文件(Datafiles)和归档重做日志(Archived Redo Logs) 的统一、详细的输入/输出 (I/O) 性能统计信息。
核心作用:作为 V$PROXY_DATAFILE_DETAILS 和 V$PROXY_ARCHIVELOG_DETAILS 的联合超集视图,它允许在一个地方查询所有类型的代理备份操作的详细异步 I/O 性能数据。用于深度诊断代理备份过程中每一次 I/O 操作的执行效率、耗时和状态。
关键定位:
- 统一视图:无需分别查询两个视图即可获取数据和归档日志的代理备份性能详情。
- 微观诊断:提供每次异步 I/O 请求的细粒度数据,是排查性能瓶颈的终极工具。
- 性能分析:揭示备份操作的时间花费在哪里(如媒体管理器处理、网络传输、设备写入)。
2. 使用场景
- 深度诊断混合备份性能:当备份集同时包含数据文件和归档日志时,使用此视图统一分析所有 I/O 操作的性能。
- 全面评估媒体管理器效率:通过分析所有类型的代理备份操作,全面评估第三方备份软件(如 NetBackup, TSM)的整体性能。
- 对比数据和日志备份性能:比较备份数据文件和备份归档日志在相同环境下的性能差异,识别潜在的不同行为模式。
- 编写统一的监控脚本:创建用于监控所有代理备份活动的脚本和告警规则,无需区分对象类型。
3. 字段含义详解
以下是 V$PROXY_COPY_DETAILS 视图的主要字段及其含义的详细表格。它包含了来自数据文件和归档日志视图的字段,并通过 COPY_TYPE 字段进行区分。
| 字段名 | 类型 | 含义详解 |
|---|---|---|
| SID | NUMBER | 会话标识符:执行此备份 I/O 操作的数据库会话的 SID。 |
| SERIAL# | NUMBER | 会话序列号:会话的序列号。与 SID 一起用于唯一标识会话。 |
| SESSION_RECID | NUMBER | 会话记录ID:与此 I/O 操作关联的 RMAN 会话的内部序列号。 |
| SESSION_STAMP | NUMBER | 会话时间戳:与 SESSION_RECID 共同组成主键,唯一标识一次 RMAN 会话。 |
| COPY_TYPE | VARCHAR2(12) | 备份类型:核心区分字段。标识此 I/O 操作属于哪种备份。 - DATAFILE: 数据文件代理备份。 - ARCHIVELOG: 归档日志代理备份。 |
| DF_NUMBER | NUMBER | 数据文件编号:如果 COPY_TYPE='DATAFILE',此字段表示被备份的数据文件编号。与 V$DATAFILE.FILE# 对应。 |
| BLOCK_SIZE | NUMBER | 块大小:如果 COPY_TYPE='DATAFILE',此字段表示数据文件的块大小(字节)。 |
| THREAD# | NUMBER | 重做线程号:如果 COPY_TYPE='ARCHIVELOG',此字段表示归档日志所属的重做线程编号。 |
| SEQUENCE# | NUMBER | 日志序列号:如果 COPY_TYPE='ARCHIVELOG',此字段表示归档日志的序列号。 |
| STATUS | VARCHAR2(15) | I/O 操作状态:表示此异步 I/O 操作的当前状态。 - IN PROGRESS: I/O 操作正在进行中。 - FINISHED: I/O 操作已成功完成。 - ERROR: I/O 操作失败。 |
| IO_TYPE | VARCHAR2(10) | I/O 类型:标识 I/O 操作的类型。对于 PROXY COPY,此值通常为 OUTPUT,表示输出(写入)操作。 |
| BYTES | NUMBER | 字节数:此 I/O 操作传输的数据总字节数。 |
| ELAPSED_TIME | NUMBER | 耗时(厘秒):核心性能字段。完成此 I/O 操作所花费的总时间(百分之一秒)。 |
| EFFECTIVE_BYTES_PER_SECOND | NUMBER | 有效字节/秒:此 I/O 操作的有效吞吐率(字节/秒)。 |
| DEVICE_TYPE | VARCHAR2(17) | 设备类型:执行 I/O 操作的设备类型。对于 PROXY COPY,此值为 SBT_TAPE。 |
| OPEN_TIME | DATE | 打开时间:I/O 操作开始的时间戳。 |
| CLOSE_TIME | DATE | 关闭时间:I/O 操作完成的时间戳。 |
| LONG_WAITS | NUMBER | 长等待次数:在此 I/O 操作期间发生的长等待的次数。 |
| SHORT_WAITS | NUMBER | 短等待次数:在此 I/O 操作期间发生的短等待的次数。 |
4. 相关视图与基表
V$PROXY_DATAFILE_DETAILS:专门用于数据文件代理备份 I/O 详情的视图。V$PROXY_COPY_DETAILS包含了它的所有数据(当COPY_TYPE='DATAFILE')。V$PROXY_ARCHIVELOG_DETAILS:专门用于归档日志代理备份 I/O 详情的视图。V$PROXY_COPY_DETAILS包含了它的所有数据(当COPY_TYPE='ARCHIVELOG')。V$PROXY_DATAFILE/V$PROXY_ARCHIVEDLOG:提供文件级别状态(非I/O详情)的视图。可通过SESSION_RECID,SESSION_STAMP及文件标识符与本视图关联。V$DATAFILE:可通过DF_NUMBER关联,获取数据文件的详细信息(如名称、表空间)。V$ARCHIVED_LOG:可通过THREAD#,SEQUENCE#,RESETLOGS_ID关联,获取归档日志的详细信息。- 基表 (Underlying Table):
V$PROXY_COPY_DETAILS是一个联合视图。其数据来源于V$PROXY_DATAFILE_DETAILS和V$PROXY_ARCHIVELOG_DETAILS的底层基表,通常是X$KRCBDFDI(Datafile) 和X$KRCBADI(Archivelog) 的联合查询。它本身没有独立的基表。
5. 底层详细原理与相关知识点
-
视图合并原理:
V$PROXY_COPY_DETAILS在数据库内部是通过一个UNION ALL或类似操作实现的。- 查询此视图时,Oracle 会分别从
V$PROXY_DATAFILE_DETAILS和V$PROXY_ARCHIVELOG_DETAILS的底层结构中获取数据,并为每一行添加一个COPY_TYPE标识符,然后将结果集合并返回给用户。 - 这种设计提供了查询的便利性,但用户需要注意,由于是两套数据的合并,某些字段只对特定
COPY_TYPE有效(如DF_NUMBER对 ‘DATAFILE’,THREAD#对 ‘ARCHIVELOG’)。
-
代理备份的通用 I/O 流程:
无论备份对象是数据文件还是归档日志,其代理备份的 I/O 控制流程 是相似的:- RMAN 向媒体管理器发出控制请求。
- 媒体管理器直接访问文件系统并读写设备。
- RMAN 异步地监控和管理这些请求。
- 每个异步请求的状态和性能指标被记录并最终呈现在本视图中。
因此,性能诊断的方法和关注的重点指标(ELAPSED_TIME,LONG_WAITS,EFFECTIVE_BYTES_PER_SECOND)对于两种类型是完全通用的。
-
性能差异的潜在原因:
尽管流程相似,但观测到的性能可能因备份对象类型而异:- 数据文件:通常很大,I/O 操作更大块、更连续。性能更易受存储子系统(磁盘阵列)的读取速度和磁带驱动器的写入速度影响。
- 归档日志:通常较小且数量多,可能涉及更多的小 I/O 操作。性能更易受元操作开销(打开/关闭文件)、网络延迟(如果归档日志位于远程)和磁带库机械臂定位时间的影响。
本视图为比较这两种不同工作负载的性能提供了统一平台。
6. 常用查询 SQL
1. 查看当前所有类型的代理备份 I/O 操作
统一监控所有正在进行的代理备份活动。
SELECT copy_type,
sid,
serial#,
-- 根据类型显示不同的标识符
CASE WHEN copy_type = 'DATAFILE' THEN TO_CHAR(df_number)
WHEN copy_type = 'ARCHIVELOG' THEN 'Thread ' || thread# || ', Seq ' || sequence#
END AS object_id,
status,
ROUND(bytes / (1024*1024), 2) AS size_mb,
ROUND(elapsed_time / 100, 2) AS elapsed_sec,
ROUND(effective_bytes_per_second / (1024*1024), 2) AS mb_per_sec
FROM v$proxy_copy_details
WHERE status = 'IN PROGRESS'
ORDER BY open_time;
2. 按类型分析已完成操作的性能
比较数据文件和归档日志备份的性能特征。
SELECT copy_type,
COUNT(*) AS io_operations,
ROUND(SUM(bytes) / (1024*1024), 2) AS total_mb,
ROUND(SUM(elapsed_time) / 100, 2) AS total_io_sec,
ROUND(AVG(elapsed_time) / 100, 4) AS avg_io_sec,
ROUND(MIN(elapsed_time) / 100, 4) AS min_io_sec,
ROUND(MAX(elapsed_time) / 100, 4) AS max_io_sec,
ROUND(AVG(effective_bytes_per_second) / (1024*1024), 2) AS avg_mb_per_sec
FROM v$proxy_copy_details
WHERE status = 'FINISHED'
AND session_stamp = &target_session_stamp -- 指定某个备份会话
GROUP BY copy_type
ORDER BY copy_type;
3. 查找性能最差的 I/O 操作(不分类型)
在整个备份作业中定位最慢的操作,无论其类型。
SELECT copy_type,
CASE WHEN copy_type = 'DATAFILE' THEN TO_CHAR(df_number)
WHEN copy_type = 'ARCHIVELOG' THEN 'Thread ' || thread# || ', Seq ' || sequence#
END AS object_id,
ROUND(bytes / (1024*1024), 2) AS size_mb,
ROUND(elapsed_time / 100, 2) AS elapsed_sec,
ROUND(effective_bytes_per_second / (1024*1024), 2) AS mb_per_sec,
long_waits
FROM v$proxy_copy_details
WHERE status = 'FINISHED'
ORDER BY elapsed_time DESC
FETCH FIRST 20 ROWS ONLY; -- 查看最慢的20个操作
4. 关联 V$DATAFILE 获取文件详情(针对数据文件)
当分析数据文件备份性能时,可以关联获取文件信息。
SELECT d.file#,
d.name AS datafile_name,
t.name AS tablespace_name,
p.bytes,
p.elapsed_time,
p.long_waits
FROM v$proxy_copy_details p
JOIN v$datafile d ON (p.df_number = d.file#)
JOIN v$tablespace t ON (d.ts# = t.ts#)
WHERE p.copy_type = 'DATAFILE'
AND p.status = 'FINISHED'
AND p.session_stamp = &target_session_stamp
ORDER BY p.elapsed_time DESC;
总结
V$PROXY_COPY_DETAILS 视图是 Oracle RMAN 代理备份监控体系中的统一诊断控制台。它的核心价值在于:
- 提供统一视角:打破了数据和归档日志备份之间的监控壁垒,允许 DBA 在一个视图中全面审视所有代理备份活动,极大提升了监控效率。
- 简化系统管理:无需编写复杂的联合查询或维护两套监控脚本,简化了管理流程。
- 促进对比分析:为比较不同类型备份对象的性能和行为模式提供了天然的平台,有助于更深入地理解整个备份系统的运行特性。
- 保持诊断深度:在提供便利性的同时,丝毫没有牺牲数据的粒度和深度,仍然能够用于最精细的性能瓶颈分析。
对于管理着包含大量数据和归档日志备份的复杂环境的 DBA 来说,熟练掌握 V$PROXY_COPY_DETAILS 视图是进行高效、全面备份性能监控和优化的关键。它代表了 Oracle 在可观测性方面朝着整合与统一方向的发展。
欢迎关注我的公众号《IT小Chen》
1682

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



