
好的,我们来对 Oracle 19C 数据库中的 V$QMON_COORDINATOR_STATS 动态性能视图进行一次全面、深入的解析。
1. 作用与概述
V$QMON_COORDINATOR_STATS 视图用于监控和展示高级队列(Advanced Queueing, AQ)中队列监控协调器进程(QMNC)的统计信息和运行状态。
- QMNC 进程: 这是 AQ 架构中的一个核心后台进程(Coordinator Process)。它不直接处理消息,而是负责管理和协调多个队列监控从属进程(QMNn)。QMNC 动态地产生和停止 QMNn 进程,并将需要处理的队列工作分配给它们。你可以将其理解为一个“经理”,而 QMNn 进程是“工人”。
- 视图内容: 此视图提供了关于这位“经理”自身工作量的统计信息,例如它被唤醒了多少次、分派了多少个工作项、创建了多少个 worker 进程等。通过这些数据,DBA 可以了解 AQ 系统的整体繁忙程度、协调器的压力以及资源配置是否合理。
2. 使用场景
此视图主要在以下场景中使用:
-
AQ 性能诊断与监控:
- 当发现消息传递、传播或出队/入队操作存在性能瓶颈时,通过查看此视图可以判断协调器本身是否成为瓶颈(例如,
TOTAL_MSGS_PROCESSED增长缓慢而消息积压严重)。 - 监控
TOTAL_PROCESSES_CREATED和PROCESSES_RUNNING可以判断当前活动的 QMNn 进程数量是否足够,是否需要调整AQ_TM_PROCESSES初始化参数。
- 当发现消息传递、传播或出队/入队操作存在性能瓶颈时,通过查看此视图可以判断协调器本身是否成为瓶颈(例如,
-
资源规划与调优:
- 通过观察
TOTAL_DFO_CALLS(动态框架操作调用次数)和TOTAL_DFO_WOQ_CALLS(带有工作项的调用次数),可以了解系统分配工作的频率,从而评估 AQ 子系统的工作负载。 - 结合
V$AQ,DBA_QUEUES等视图,可以全面评估 AQ 的整体健康状况。
- 通过观察
-
问题排查:
- 如果 AQ 功能似乎停滞,检查此视图可以确认 QMNC 进程是否还在正常工作(是否有最近的
LAST_CREATE_TIME,LAST_STOP_TIME等)。
- 如果 AQ 功能似乎停滞,检查此视图可以确认 QMNC 进程是否还在正常工作(是否有最近的
3. 字段含义详解
以下是 V$QMON_COORDINATOR_STATS 视图中各字段的详细解释。请注意,不同小版本(如 19.x)的字段可能略有差异,但核心字段一致。
| 字段名称 | 数据类型 | 含义说明 |
|---|---|---|
| COORDINATOR_PID | NUMBER | 协调器进程的操作系统进程ID (PID)。这是定位和跟踪特定 QMNC 进程的关键标识。 |
| TOTAL_MSGS_PROCESSED | NUMBER | 自实例启动以来,由所有 QMNn 进程处理的消息总数。这是一个累计值,反映了 AQ 系统的总工作量。 |
| TOTAL_PROCESSES_CREATED | NUMBER | 自实例启动以来,QMNC 创建的所有 QMNn 进程的总数。 |
| PROCESSES_RUNNING | NUMBER | 当前正在运行的 QMNn 进程的数量。 |
| PROCESSES_MAXIMUM | NUMBER | 自实例启动以来,同时运行的 QMNn 进程达到的最大数量。可与 AQ_TM_PROCESSES 参数值对比。 |
| TOTAL_DFO_CALLS | NUMBER | 动态框架操作 (Dynamic Framework Operation) 的总调用次数。这是 QMNC 核心调度活动的次数。 |
| TOTAL_DFO_WOQ_CALLS | NUMBER | 其中带有待处理工作项(Work Queue Item)的 DFO 调用次数。比值 (WOQ_CALLS/DFO_CALLS) 可以反映调度效率。 |
| TOTAL_WAKEUPS | NUMBER | QMNC 进程被唤醒的总次数。唤醒可能由定时器或新工作项到达触发。 |
| TOTAL_WAKEUPS_WOQ | NUMBER | 因为有待处理工作项而导致的唤醒次数。 |
| LAST_CREATE_TIME | DATE | 最后一次创建 QMNn 进程的时间。 |
| LAST_STOP_TIME | DATE | 最后一次停止 QMNn 进程的时间。QMNC 会在空闲时停止 worker 进程以节省资源。 |
| TOTAL_SPAWN_FAILURES | NUMBER | 尝试创建 QMNn 进程但失败的次数。如果此值大于 0,需要警惕系统资源(如进程数、内存)可能不足。 |
| TOTAL_EXEC_TIME | NUMBER | QMNC 进程花费在执行操作上的总时间(单位:秒)。 |
| TOTAL_IDLE_TIME | NUMBER | QMNC 进程处于空闲状态的总时间(单位:秒)。 |
| CURRENT_STATE | VARCHAR2(64) | QMNC 进程的当前状态。常见值:SLEEPING(睡眠)、PROCESSING DFO(正在处理动态框架操作)等。 |
| STATE_CHANGE_TIME | DATE | 最后一次状态改变的时间。 |
4. 相关视图与基表
-
相关动态性能视图:
V$AQ: 显示整个实例中队列的总体统计信息(消息数量、等待时间等)。V$BUFFERED_QUEUES/V$BUFFERED_SUBSCRIBERS: 针对缓冲队列的详细信息和订阅者信息。V$BUFFERED_PUBLISHERS: 缓冲队列的发布者信息。DBA_QUEUES/DBA_QUEUE_TABLES: 数据字典视图,显示队列和队列表的元数据定义。V$PROCESS: 可以通过COORDINATOR_PID与V$QMON_COORDINATOR_STATS关联,获取进程的更多详细信息(如操作系统 PID)。
-
基表(Underlying Base Table):
- XQMCST∗∗:这是‘VQMCST**: 这是 `VQMCST∗∗:这是‘VQMON_COORDINATOR_STATS
所依赖的底层内存结构(基表)。**X$表是Oracle内部的、未公开文档的、基于内存的虚拟表,存储了内核中的实时数据。直接查询X$表是危险且不被Oracle支持的,仅供数据库内部组件(如V$视图)使用。 V$FIXED_VIEW_DEFINITION: 可以通过查询此视图来查看V$QMON_COORDINATOR_STATS是如何构建的:SELECT view_definition FROM v$fixed_view_definition WHERE view_name = 'GV$QMON_COORDINATOR_STATS'; -- 通常,V$视图是GV$视图(全局)在实例上的别名
- XQMCST∗∗:这是‘VQMCST**: 这是 `VQMCST∗∗:这是‘VQMON_COORDINATOR_STATS
5. 底层详细原理
-
AQ 架构回顾:
- QMNC: 协调器进程,常驻后台进程。它管理着 QMNn 进程的生命周期。
- QMNn: 从属进程(
n是数字),是实际干活的进程。它们执行具体的消息传播、到期处理、清理等任务。数量由AQ_TM_PROCESSES参数控制(默认值 0,最大值 10)。
-
QMNC 的工作流程:
- 休眠与唤醒: QMNC 大部分时间处于休眠状态。它会被以下事件唤醒:
- 定时器到期: 定期检查是否有工作需要做。
- 新工作项到达: 当有新的消息需要传播、或有消息到期等事件发生时,会被触发唤醒。
- 工作分配(DFO): 当被唤醒后,QMNC 会执行一个动态框架操作(DFO):
- 检查所有已注册的队列和工作源(如需要传播的消息、到期的消息)。
- 将这些工作打包成工作项(Work Queue Items)。
- 查看当前可用的 QMNn 进程池。
- 将工作项分派给空闲的 QMNn 进程。如果没有空闲进程且未达到最大进程数限制,则会创建(Spawn) 新的 QMNn 进程。
- 进程管理: 如果 QMNn 进程空闲一段时间后,QMNC 会将其停止(Stop) 以释放系统资源。
- 休眠与唤醒: QMNC 大部分时间处于休眠状态。它会被以下事件唤醒:
-
统计信息收集:
- 上述所有的活动(唤醒、DFO 调用、进程创建/停止、消息处理计数)都会被 Oracle 内核代码中的计数器所记录。
- 这些计数器的值存储在内存结构(即
X$QMCST)中。 V$QMON_COORDINATOR_STATS视图的作用就是以用户可读的方式查询和展示这些内存中的统计信息。
6. 相关知识点介绍
AQ_TM_PROCESSES参数: 此参数定义了当前实例中可以创建的最大 QMNn 进程数。设置为 0 会禁用 AQ 的异步计算功能(传播和消息过期可能无法及时处理)。对于需要用到 AQ 特别是消息传播的系统,建议设置为一个大于 0 的值(如 1)。- 持久性 vs. 缓冲消息: AQ 支持两种消息模式。理解这一点很重要,因为 QMNC/QMNn 主要处理缓冲消息(Buffered Messaging) 的异步操作(如传播、过期),而持久消息的传播也可能由 QMNn 处理,但可靠性机制不同。
- 提交与异步处理: QMNn 进程的工作(如传播)是独立于你的应用程序事务的。你的应用程序入队一个消息并提交后,QMNC/QMNn 会异步地处理这个消息的后续操作(如传播到另一个队列)。
7. 常用查询 SQL
1. 查看 QMNC 基本运行概况和负载
SELECT coordinator_pid,
total_msgs_processed,
processes_running,
processes_maximum,
total_processes_created,
total_spawn_failures,
current_state,
last_create_time,
last_stop_time
FROM v$qmon_coordinator_stats;
2. 检查协调器的工作效率和繁忙程度
SELECT coordinator_pid,
total_dfo_calls,
total_dfo_woq_calls,
ROUND((total_dfo_woq_calls / NULLIF(total_dfo_calls, 0)) * 100, 2) AS pct_woq_calls,
total_wakeups,
total_wakeups_woq,
ROUND((total_wakeups_woq / NULLIF(total_wakeups, 0)) * 100, 2) AS pct_effective_wakeups,
total_exec_time,
total_idle_time
FROM v$qmon_coordinator_stats;
3. 监控 QMNn 进程的创建失败情况(重要!)
SELECT coordinator_pid,
total_spawn_failures,
last_create_time,
processes_maximum
FROM v$qmon_coordinator_stats
WHERE total_spawn_failures > 0;
-- 如果 total_spawn_failures > 0,说明系统可能已经达到 AQ_TM_PROCESSES 上限或系统进程数上限,需要调查。
4. 结合 V$PROCESS 查看详细信息
SELECT s.coordinator_pid,
p.spid AS os_pid,
s.processes_running,
s.total_msgs_processed,
p.program
FROM v$qmon_coordinator_stats s
JOIN v$process p ON s.coordinator_pid = p.pid;
总结
V$QMON_COORDINATOR_STATS 是深入洞察 Oracle Advanced Queueing 子系统核心调度器(QMNC)健康状况和性能表现的关键视图。它通过暴露协调器进程的详细统计信息,帮助 DBA 诊断 AQ 相关的性能瓶颈、规划资源配置以及排查问题。理解其字段含义和背后的 AQ 架构原理,对于管理和维护依赖消息队列的复杂数据库应用至关重要。
欢迎关注我的公众号《IT小Chen》
755

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



