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

在这里插入图片描述
好的,我们来对 Oracle 19C 中的 V$PROPAGATION_RECEIVER 动态性能视图进行一次全面、深入的详解。这个视图是 Oracle 流复制 (Streams)高级复制 (Advanced Replication) 架构中的关键诊断工具,专门用于监控传播接收器的状态。

1. 作用与概述

V$PROPAGATION_RECEIVER 动态性能视图提供了关于 Oracle 流复制中传播作业(Propagation)的接收端(Receiver) 的实时性能和状态信息。

核心作用:监控从源数据库 发送到本数据库(即目标数据库)的传播消息的接收情况。它让你能够洞察接收器进程的健康状况、性能指标(如消息吞吐量、延迟)以及任何遇到的错误。这是诊断跨数据库数据复制延迟、失败或性能问题的关键视图。

重要提示V$PROPAGATION_RECEIVER 显示的是目标数据库上的信息。要查看源数据库上发送端的信息,应使用 V$PROPAGATION_SENDER 视图。

2. 使用场景

  1. 诊断复制延迟问题:当目标数据库的数据滞后于源数据库时,使用此视图检查接收器是否正在运行、接收消息的速率以及最后一条成功接收的消息的 SCN 和时间戳,以量化延迟。
  2. 排查复制失败或中断:当复制停止工作时,检查视图中的 STATUS 字段和 LAST_ERROR_* 系列字段,以确定接收器是否因遇到错误而停止。
  3. 监控复制性能:评估接收器进程的资源消耗(如 CPU 时间)和吞吐量(每秒消息数、字节数),以确定复制是否成为系统瓶颈。
  4. 验证配置和操作:在启停传播作业、进行维护或修改配置后,查询此视图以确认操作是否生效以及接收器状态是否符合预期。

3. 字段含义详解

以下是 V$PROPAGATION_RECEIVER 视图的主要字段及其含义的详细表格。

字段名类型含义详解
QUEUE_SCHEMAVARCHAR2(30)队列所有者模式本地目标队列的所有者用户名。
QUEUE_NAMEVARCHAR2(30)队列名称本地目标队列的名称。传播的消息最终会被放入此队列。
SOURCE_DATABASEVARCHAR2(128)源数据库:消息来源数据库的全局名称(Global Name)。
STATUSVARCHAR2(8)接收器状态核心字段。表示接收器进程的当前状态。
- RUNNING: 正在运行并接收消息。
- ABORTED: 因错误而中止。检查 LAST_ERROR 字段。
- SCHEDULED: 已调度但未运行(可能在等待下一次运行时间)。
- DISABLED: 传播作业已被禁用。
SIDNUMBER会话标识符:接收器会话的 SID。可与 V$SESSION 关联获取更多会话详情。
SERIAL#NUMBER会话序列号:接收器会话的序列号。与 SID 一起可唯一标识会话。
TOTAL_MESSAGESNUMBER消息总数:本次运行期间成功接收并入队的消息总数。
TOTAL_BYTESNUMBER字节总数:本次运行期间成功接收的消息的总字节大小。
CURRENT_MSG_CREATIONDATE当前消息创建时间衡量延迟的关键字段。当前正在处理的消息在源数据库上被创建(提交)的时间。如果接收器空闲,则显示最后一条处理的消息的创建时间。将此时间与当前时间比较,可估算数据延迟。
LAST_ERRORVARCHAR2(100)最后错误:接收器遇到的最后一个错误的错误消息。
LAST_ERROR_MESSAGEVARCHAR2(4000)最后错误消息全文:上一个错误的完整消息文本,通常比 LAST_ERROR 更详细。
ERROR_DATEDATE错误日期:最后一个错误发生的时间戳。
RECEIVER_TIMENUMBER接收器时间:接收器进程在处理消息上花费的总时间(秒)。
RECEIVER_CPU_TIMENUMBER接收器CPU时间:接收器进程消耗的 CPU 时间(秒)。高 CPU 时间可能表明处理逻辑复杂或消息量大。
INSTANCEVARCHAR2(16)实例名:在 RAC 环境中,运行此接收器进程的实例名称。

4. 相关视图与基表

  • V$PROPAGATION_SENDER最直接的相关视图,但在源数据库上查询。它显示了发送到目标数据库的传播发送端的性能指标。两者结合可以全面分析传播链路(例如,对比发送和接收的消息数量是否匹配)。
  • DBA_PROPAGATION:数据字典视图,显示所有已配置的传播作业的静态定义信息(如源队列、目标队列、目标数据库链接、传播规则等)。
  • DBA_QUEUES:数据字典视图,显示队列信息,包括用作传播目标的队列。
  • V$STREAMS_CAPTURE, V$STREAMS_APPLY_READER, V$STREAMS_APPLY_SERVER:其他流相关的性能视图,用于监控捕获和应用进程。
  • V$SESSION:通过 SIDSERIAL# 关联,可以获取接收器会话的详细执行信息(如 SQL_ID, EVENT, WAIT_TIME)。
  • 基表 (Underlying Table)V$PROPAGATION_RECEIVER 的数据来源于流复制组件的内存管理结构。其底层 X表∗∗通常是∗∗‘X表** 通常是 **`X通常是XQPROP_RCVR` 或类似名称的内部结构。这些是 Oracle 内部的、未公开的结构。

5. 底层详细原理与相关知识点

  1. Oracle Streams/Advanced Replication 架构

    • 传播 (Propagation) 是流复制中的一个关键组件,负责将源队列中的消息(代表数据变更的 LCRs - Logical Change Records)通过数据库链接(DBLINK)发送到远程目标队列
    • 这个过程涉及两个主要进程:
      • 传播发送器 (Propagation Sender):在源数据库运行,从事务队列中取出消息并通过网络发送。
      • 传播接收器 (Propagation Receiver):在目标数据库运行(由发送器进程通过数据库链接调用),接收消息并将其入队到目标队列中。V$PROPAGATION_RECEIVER 监控的就是这个进程。
  2. 工作流程

    1. 源数据库的捕获进程或用户应用将 LCRs 或消息放入源队列。
    2. 源数据库的传播作业(发送器)被调度启动。
    3. 发送器通过预先配置的数据库链接连接到目标数据库。
    4. 发送器在目标数据库端启动一个接收器会话。
    5. 接收器会话从网络连接读取消息流。
    6. 接收器会话将消息事务性地(原子地)插入到目标队列中。
    7. 目标数据库的应用进程从目标队列中取出消息并应用(执行 DML)。
      V$PROPAGATION_RECEIVER 统计信息就是在第 5 和第 6 步中收集的。
  3. 关键性能指标与诊断

    • 延迟 (CURRENT_MSG_CREATION): 这是最重要的指标。它直接反映了数据的新旧程度。
    • 吞吐量 (TOTAL_MESSAGES, TOTAL_BYTES): 结合运行时间,可以计算消息速率,评估复制性能。
    • 错误 (LAST_ERROR_*): 任何错误都可能导致复制中断。常见的错误包括网络问题、数据库链接认证失败、目标队列不可用、权限不足等。
    • 资源消耗 (RECEIVER_CPU_TIME): 高 CPU 消耗可能指向复杂的消息转换规则或极高的消息流量。

6. 常用查询 SQL

1. 查看所有传播接收器的摘要状态(最常用)
快速了解所有传入复制链路的健康状况。

SELECT source_database,
       queue_schema || '.' || queue_name AS destination_queue,
       status,
       current_msg_creation,
       total_messages,
       total_bytes,
       last_error
FROM v$propagation_receiver
ORDER BY source_database;

2. 计算数据延迟(极其重要)
精确计算目标数据库落后源数据库的时间。

SELECT source_database,
       queue_schema,
       queue_name,
       status,
       current_msg_creation,
       -- 计算延迟(分钟)
       ROUND((SYSDATE - current_msg_creation) * 24 * 60, 2) AS delay_minutes,
       total_messages
FROM v$propagation_receiver
WHERE status = 'RUNNING' -- 通常只关心正在运行的
   OR current_msg_creation IS NOT NULL;

3. 诊断出错的传播接收器
快速找到有问题的复制链路并查看错误详情。

SELECT source_database,
       queue_schema,
       queue_name,
       status,
       error_date,
       last_error,
       last_error_message -- 包含最详细的错误信息
FROM v$propagation_receiver
WHERE status = 'ABORTED'
   OR last_error IS NOT NULL;

4. 关联V$SESSION获取更多等待信息
当接收器性能不佳时,查看其会话在等待什么资源。

SELECT r.source_database,
       r.queue_name,
       r.status,
       s.sid,
       s.serial#,
       s.event,
       s.seconds_in_wait,
       s.state
FROM v$propagation_receiver r
JOIN v$session s ON (r.sid = s.sid AND r.serial# = s.serial#)
WHERE r.status = 'RUNNING';

5. 监控接收器的性能速率
假设该查询每分钟运行一次,可以计算每秒的消息吞吐量。

-- 第一次运行:记录初始值
CREATE TABLE prop_rec_snapshot AS
SELECT source_database, queue_name, total_messages, total_bytes, SYSDATE AS snap_time
FROM v$propagation_receiver
WHERE status = 'RUNNING';

-- 等待一段时间(如60秒)后第二次运行
SELECT r.source_database,
       r.queue_name,
       -- 计算每秒消息数
       (r.total_messages - s.total_messages) / (r.snap_time - s.snap_time) / 86400 AS msg_per_sec,
       -- 计算每秒字节数
       (r.total_bytes - s.total_bytes) / (r.snap_time - s.snap_time) / 86400 AS bytes_per_sec
FROM v$propagation_receiver r
JOIN prop_rec_snapshot s ON (r.source_database = s.source_database AND r.queue_name = s.queue_name)
WHERE r.status = 'RUNNING';

-- 更新快照以供下次使用
DROP TABLE prop_rec_snapshot;
CREATE TABLE prop_rec_snapshot AS 
SELECT source_database, queue_name, total_messages, total_bytes, SYSDATE AS snap_time 
FROM v$propagation_receiver 
WHERE status = 'RUNNING';

总结

V$PROPAGATION_RECEIVER 视图是管理和维护 Oracle 流复制和高级复制环境核心监控点。它专注于复制链路的目标端,提供了评估数据新鲜度(延迟)可靠性(错误)性能(吞吐量) 所需的关键指标。

通过持续监控此视图,DBA 可以:

  1. ** proactively 发现**复制延迟并分析其原因。
  2. 快速响应复制中断故障,并根据详细的错误信息进行修复。
  3. 量化评估复制对目标系统资源的消耗,并进行容量规划。
  4. 验证复制配置和操作的有效性。

对于依赖 Oracle 流复制进行数据分发的系统,熟练掌握此视图是保障数据一致性和业务连续性的必备技能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值