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

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

1. 作用与概述

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

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

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

2. 使用场景

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

3. 字段含义详解

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

字段名类型含义详解
DBA_NAMEVARCHAR2(128)目标数据库:消息要发送到的目标数据库的全局名称(Global Name)。这是复制链路的目标标识。
QUEUE_SCHEMAVARCHAR2(30)队列所有者模式本地源队列的所有者用户名。
QUEUE_NAMEVARCHAR2(30)队列名称本地源队列的名称。传播发送器从此队列中取出消息发送。
STATUSVARCHAR2(8)发送器状态核心字段。表示发送器进程的当前状态。
- RUNNING: 正在运行并发送消息。
- ABORTED: 因错误而中止。检查 LAST_ERROR 字段。
- SCHEDULED: 已调度但未运行(可能在等待下一次运行时间或消息)。
- DISABLED: 传播作业已被禁用。
SIDNUMBER会话标识符:发送器会话的 SID。可与 V$SESSION 关联获取更多会话详情。
SERIAL#NUMBER会话序列号:发送器会话的序列号。与 SID 一起可唯一标识会话。
TOTAL_MESSAGESNUMBER消息总数:本次运行期间成功发送的消息总数。
TOTAL_BYTESNUMBER字节总数:本次运行期间成功发送的消息的总字节大小。
CURRENT_MSG_CREATION_TIMESTAMPDATE当前消息创建时间衡量延迟的关键字段。当前正在发送的消息在源数据库上被创建(提交)的时间。如果发送器空闲,则显示最后一条发送的消息的创建时间。
LAST_ERRORVARCHAR2(100)最后错误:发送器遇到的最后一个错误的错误消息。常见错误涉及网络、数据库链接、目标队列权限等。
LAST_ERROR_MESSAGEVARCHAR2(4000)最后错误消息全文:上一个错误的完整消息文本,通常比 LAST_ERROR 更详细。
ERROR_DATEDATE错误日期:最后一个错误发生的时间戳。
SENDER_TIMENUMBER发送器时间:发送器进程在发送消息上花费的总时间(秒)。
SENDER_CPU_TIMENUMBER发送器CPU时间:发送器进程消耗的 CPU 时间(秒)。
INSTANCEVARCHAR2(16)实例名:在 RAC 环境中,运行此发送器进程的实例名称。
DESTINATIONVARCHAR2(128)目标地址:发送连接的目标地址,通常包含服务名和数据库链接信息。

4. 相关视图与基表

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

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

  1. Oracle Streams/Advanced Replication 架构

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

    1. 源数据库的捕获进程或用户应用将 LCRs 或消息放入源队列。
    2. 源数据库的传播作业(发送器)被调度启动。
    3. 发送器通过预先配置的数据库链接连接到目标数据库。此阶段常见的等待事件是SQL*Net message to client
    4. 发送器从源队列中取出消息。此阶段常见的等待事件是Streams AQ: waiting for messages in the queue
    5. 发送器将消息通过网络发送给目标数据库的接收器。此阶段常见的等待事件是SQL*Net more data to client,网络性能是此处关键。
    6. 发送器等待接收器的确认。此阶段常见的等待事件是SQL*Net message from client
      V$PROPAGATION_SENDER 的统计信息就是在第 3、4、5、6 步中收集的。
  3. 关键性能指标与诊断

    • 延迟 (CURRENT_MSG_CREATION_TIMESTAMP): 消息在源端产生的时间。与当前时间比较可计算源端积压的延迟。
    • 吞吐量 (TOTAL_MESSAGES, TOTAL_BYTES): 结合运行时间,可以计算发送速率,评估网络性能和发送端负载。
    • 错误 (LAST_ERROR_*): 发送端错误通常与连接性相关:网络中断、数据库链接配置错误、目标主机无法解析、目标监听器未启动、权限不足(如对目标队列的入队权限)等。
    • 资源消耗 (SENDER_CPU_TIME): 高 CPU 消耗可能指向复杂的消息转换规则或极高的消息流量。

6. 常用查询 SQL

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

SELECT dba_name AS destination_db,
       queue_schema || '.' || queue_name AS source_queue,
       status,
       current_msg_creation_timestamp,
       total_messages,
       total_bytes,
       last_error
FROM v$propagation_sender
ORDER BY dba_name;

2. 计算源端积压的延迟
查看消息在源端队列中等待了多久才被处理。

SELECT dba_name,
       queue_schema,
       queue_name,
       status,
       current_msg_creation_timestamp,
       -- 计算源端延迟(分钟)
       ROUND((SYSDATE - current_msg_creation_timestamp) * 24 * 60, 2) AS source_delay_minutes,
       total_messages
FROM v$propagation_sender
WHERE status = 'RUNNING'
   OR current_msg_creation_timestamp IS NOT NULL;

3. 诊断出错的传播发送器
快速找到有问题的发送链路并查看错误详情,重点关注连接性问题。

SELECT dba_name,
       queue_schema,
       queue_name,
       status,
       error_date,
       last_error,
       last_error_message -- 包含最详细的错误信息,如ORA-12170: TNS连接超时
FROM v$propagation_sender
WHERE status = 'ABORTED'
   OR last_error IS NOT NULL;

4. 关联V$SESSION获取网络等待信息
当发送器性能不佳时,查看其会话是否在等待网络I/O。

SELECT s.dba_name,
       s.queue_name,
       s.status,
       sess.sid,
       sess.serial#,
       sess.event, -- 重点关注 'SQL*Net%' 相关事件
       sess.seconds_in_wait,
       sess.state
FROM v$propagation_sender s
JOIN v$session sess ON (s.sid = sess.sid AND s.serial# = sess.serial#)
WHERE s.status = 'RUNNING';

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

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

-- 等待一段时间(如60秒)后第二次运行
SELECT s.dba_name,
       s.queue_name,
       -- 计算每秒消息数
       (s.total_messages - snap.total_messages) / (s.snap_time - snap.snap_time) / 86400 AS msg_per_sec,
       -- 计算每秒字节数 (网络带宽使用)
       (s.total_bytes - snap.total_bytes) / (s.snap_time - snap.snap_time) / 86400 AS bytes_per_sec
FROM v$propagation_sender s
JOIN prop_send_snapshot snap ON (s.dba_name = snap.dba_name AND s.queue_name = snap.queue_name)
WHERE s.status = 'RUNNING';

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

总结

V$PROPAGATION_SENDER 视图是管理和维护 Oracle 流复制和高级复制环境源端核心监控点。它专注于复制链路的起始点,提供了评估发送性能网络健康状况源端可靠性所需的关键指标。

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

  1. 判断问题范围:区分复制问题是源自发送端、网络还是接收端。
  2. 快速诊断和解决源端发起的连接性和权限类错误。
  3. 量化评估复制对源系统资源的消耗以及网络带宽的使用情况。
  4. 验证源端的复制配置和操作的有效性。

对于依赖 Oracle 流复制进行数据分发的系统,将 V$PROPAGATION_SENDER(源端)与 V$PROPAGATION_RECEIVER(目标端)结合使用,是构建完整监控体系、保障数据高效可靠分发的必备技能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值