
好的,我们来对 Oracle 19C 数据库中的 V$PQ_SLAVE 动态性能视图进行一次极其详细和准确的解析。这个视图是深入诊断 Oracle 并行查询(Parallel Query, PQ)执行细节和服务器进程状态的关键工具。
1. 作用与概述
V$PQ_SLAVE 视图的主要作用是提供当前实例中每个并行服务器进程(Parallel Execution Server,也称为从属进程或 Slaves)的实时状态和统计信息。
核心概念:并行服务器进程 (Parallel Execution Servers)
当 SQL 语句以并行方式执行时,查询协调器(Query Coordinator, QC)进程会分配一组并行服务器进程来执行繁重的工作。这些进程是实际执行全表扫描、处理数据、进行连接和排序等操作的劳动力。V$PQ_SLAVE 提供了这些“劳动力”的个体工作状态报告。
简而言之,它回答了 DBA 的问题:“我的每个并行从属进程现在在做什么?它们处理了多少数据?状态是否健康?负载是否均衡?”
2. 使用场景
-
实时监控并行执行:
当一个大型并行查询正在运行时,DBA 可以使用此视图实时观察每个从属进程的进度和状态,判断查询是正在运行、空闲还是遇到了问题。 -
诊断并行执行倾斜(Data Skew):
这是最重要的用途。如果并行查询性能不佳,通过此视图可以检查是否所有从属进程都在均匀地工作。如果某些进程处理了大量消息而其他进程很空闲,则表明存在执行倾斜,这通常是由于数据分布不均或 SQL 写法问题导致的。 -
识别并行执行瓶颈:
通过观察进程状态,可以判断瓶颈所在。例如,所有“生产者”进程都处于EXECUTING状态而“消费者”进程都处于IDLE状态,可能表明表队列(Table Queue)通信是瓶颈。 -
验证并行度(DOP):
确认实际参与查询的并行服务器进程数量是否符合预期。
3. 字段含义详解
以下是 V$PQ_SLAVE 视图中每个字段的精确说明。
| 字段名 | 数据类型 | 含义说明 |
|---|---|---|
| SLAVE_NAME | VARCHAR2(4) | 并行服务器进程的操作系统进程名。格式通常为 Pxxx(如 P002, P003)。 |
| STATUS | VARCHAR2(8) | 进程的当前状态。主要值: - BUSY: 进程正在 actively working(正在工作)。- IDLE: 进程空闲,等待被分配工作。- QUIT: 进程已终止。 |
| SESSION_ID | NUMBER | 与此从属进程关联的数据库会话标识符 (SID)。这是一个虚拟会话,用于在 V$SESSION 等视图中跟踪从属进程的活动。 |
| PROCESS | VARCHAR2(7) | 进程的全局标识符。通常与 SLAVE_NAME 相同或类似。 |
| CPU | NUMBER | 此从属进程自启动以来消耗的 CPU 时间(单位:百分之一秒)。 |
| IO | NUMBER | 此从属进程自启动以来执行的物理 I/O 次数。 |
| MESSAGES | NUMBER | 此从属进程通过并行执行表队列(Table Queue)发送和接收的消息总数。这是衡量其通信活跃度的关键指标。 |
| BYTES | NUMBER | 此从属进程通过并行执行表队列(Table Queue)发送和接收的数据总字节数。这是衡量其处理数据量的关键指标。 |
| CIRCUITS | NUMBER | 此从属进程建立和使用的连接电路数。主要用于 RAC 环境中的跨实例并行执行。 |
| INST_ID | NUMBER | 在 Oracle RAC 环境中,该从属进程所在实例的标识符。对于单实例数据库,此值始终为 1。 |
| CON_ID | NUMBER | 包含此从属进程的容器的 ID。在 CDB 环境中,指示该进程服务于哪个 PDB。 |
4. 相关视图与基表
-
相关动态性能视图:
GV$PX_PROCESS/V$PX_PROCESS:这是最直接相关的视图。它也提供了并行执行进程的信息,但视角和字段略有不同。两者经常结合使用。GV$PX_SESSION/V$PX_SESSION:显示并行执行会话的详细信息,特别是查询协调器(QC)和从属进程之间的关联关系。通过QCSID和SID可以连接V$PQ_SLAVE。GV$SESSION/V$SESSION:V$PQ_SLAVE.SESSION_ID可以与V$SESSION.SID关联,以获取更多会话级别的详细信息(如SQL_ID,EVENT)。V$PQ_TQSTAT:提供表队列级别的详细统计信息,可以与V$PQ_SLAVE结合分析,查看每个进程在特定表队列中的生产/消费情况。V$PROCESS:提供底层操作系统进程的详细信息,V$PQ_SLAVE.SLAVE_NAME通常与V$PROCESS.SPID或进程名有关联。
-
底层基表与原理:
V$PQ_SLAVE是一个动态性能视图,其数据不直接来源于普通的磁盘基表。- 数据源:其数据由并行执行服务器进程自身和并行查询协调器(QC) 动态维护。每个从属进程都会更新自己的统计信息(如
BYTES,MESSAGES),这些信息存储在各个从属进程的 PGA 内存中。 - 收集机制:当查询
V$PQ_SLAVE时,Oracle 会从所有活跃的并行服务器进程的 PGA 中收集这些信息,并聚合成一个统一的视图。 - 生命周期:这些统计信息是进程级别的。它们在该并行服务器进程被创建时初始化,并在其生命周期内持续累积。当进程被返还给空闲进程池或终止时,其统计信息会被重置或丢弃。
- 底层结构:其底层来源于内部的
X$表(如X$KXFPMS),这些表在查询时动态地从进程的 PGA 中获取数据。
- 数据源:其数据由并行执行服务器进程自身和并行查询协调器(QC) 动态维护。每个从属进程都会更新自己的统计信息(如
5. 详细原理与知识点
1. 生产者-消费者模型与负载均衡:
Oracle 并行执行采用生产者-消费者模型。一组进程(生产者)扫描数据并放入表队列,另一组进程(消费者)从表队列中取出数据进行后续处理。V$PQ_SLAVE 的 BYTES 和 MESSAGES 字段直接反映了每个进程在这个模型中的工作量。
- 理想情况:所有同类进程(如所有生产者)的
BYTES和MESSAGES值应该大致相同,表示负载均衡。 - 数据倾斜:如果某些生产者的
BYTES远大于其他生产者,说明它们处理了更多的数据块,这可能是由于分区粒度不均或数据分布倾斜(如某个分区数据量巨大)造成的。 - 执行倾斜:如果SQL本身(如连接条件、过滤条件)导致某些并行服务器处理的数据行远多于其他进程,也会在此视图中体现出来。
2. 进程状态解读:
BUSY:进程正在执行其工作单元(如扫描块、处理数据、哈希连接)。这是期望的状态。IDLE:进程已完成其当前任务,正在等待新的指令或数据。如果大量进程长时间处于IDLE状态,而查询仍未结束,可能表明协调器(QC)分配工作不均,或者执行计划中存在顺序执行的瓶颈点。
3. 与V$PX_PROCESS的区别:
V$PQ_SLAVE:更侧重于历史累积的统计信息(BYTES,MESSAGES,IO,CPU),用于分析工作量。V$PX_PROCESS:更侧重于进程的当前状态和所属服务(STATUS,SERVER_NAME),用于监控进程本身的可用性和分配情况。
两者互为补充,共同提供了并行执行服务器的完整画像。
6. 常用查询SQL
1. 查看所有并行从属进程的当前状态和工作量(基础监控)
SELECT slave_name,
status,
session_id,
messages,
ROUND(bytes / 1024 / 1024, 2) AS bytes_mb,
cpu,
io
FROM v$pq_slave
ORDER BY slave_name;
2. 诊断并行执行倾斜(关键诊断查询)
此查询帮助快速识别哪些进程是“热点”进程,工作量远高于平均水平。
SELECT slave_name,
status,
messages,
ROUND(bytes / 1024 / 1024, 2) AS bytes_mb,
-- 计算每个进程的工作量相对于平均值的百分比
ROUND( (bytes / NULLIF(AVG(bytes) OVER (), 0)) * 100, 2 ) AS pct_of_avg_work
FROM v$pq_slave
WHERE status = 'BUSY' -- 只关心正在工作的进程
ORDER BY bytes DESC;
3. 关联V$SESSION,获取正在执行的SQL信息(定位问题SQL)
SELECT ps.slave_name,
ps.status,
s.sql_id,
s.event,
s.seconds_in_wait,
ROUND(ps.bytes / 1024 / 1024, 2) AS bytes_mb,
ps.messages
FROM v$pq_slave ps
JOIN v$session s ON ps.session_id = s.sid
WHERE ps.status = 'BUSY'
ORDER BY ps.bytes DESC;
4. 监控RAC环境中的跨实例并行进程
SELECT inst_id,
slave_name,
status,
circuits,
ROUND(bytes / 1024 / 1024, 2) AS bytes_mb
FROM gv$pq_slave
ORDER BY inst_id, bytes DESC;
总结
V$PQ_SLAVE 视图是 Oracle 并行查询执行的“工头视角”。它让你能够深入到并行执行的工作组内部,审视每一个“工人”(从属进程)的工作状态和绩效。通过它,可以:
- 微观分析:超越会话级的汇总统计(
V$PQ_SESSTAT),从进程级别洞察并行执行的细节。 - 精准定位倾斜:快速、准确地识别出因数据分布或SQL执行特性导致的负载不均问题,这是并行查询调优的关键。
- 实时监控:观察并行查询的执行流程,判断进程是处于忙碌、空闲还是等待状态。
- 全面评估:与
V$PX_SESSION、V$PQ_TQSTAT等视图结合,构建出完整的并行执行性能画像。
对于需要处理复杂、大规模并行查询的环境,熟练掌握 V$PQ_SLAVE 是进行深度性能诊断和优化的必备高级技能。它直接将并行执行的抽象概念转化为可度量、可分析的量化指标。
欢迎关注我的公众号《IT小Chen》
321

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



