
好的,我们来对 Oracle 19C 数据库中的 V$PQ_SYSSTAT 动态性能视图进行一次极其详细和准确的解析。这个视图是监控和评估整个数据库实例(系统级)并行查询(Parallel Query, PQ)整体运行状况和负载情况的宏观仪表盘。
1. 作用与概述
V$PQ_SYSSTAT 视图的主要作用是提供自实例启动以来,所有会话累积的系统级并行查询执行统计信息。它反映了并行查询在实例层面的总体活动水平、资源消耗和效率。
核心概念:系统级并行统计
V$PQ_SESSTAT:聚焦于单个会话的并行活动。V$PQ_SLAVE:聚焦于单个并行服务器进程的活动。V$PQ_SYSSTAT:聚焦于整个Oracle实例的并行活动,是所有会话和所有并行操作的汇总。
简而言之,它回答了DBA的宏观问题:“我的数据库实例自启动以来,并行查询总体忙不忙?处理了多少数据?资源利用效率如何?是否存在潜在的资源瓶颈?”
2. 使用场景
-
实例健康与负载监控:
定期检查此视图,了解并行查询在实例整体负载中的占比,判断系统是否如预期那样利用并行处理能力。 -
容量规划与资源评估:
根据Servers Started,Servers Highwater等统计信息,评估当前PARALLEL_MAX_SERVERS等参数的配置是否满足业务峰值需求,并为硬件规划提供数据支持。 -
性能问题初步诊断:
当实例出现性能压力时,通过此视图快速判断是否由高并发的并行操作引起(例如,Servers Busy值持续很高)。 -
效率评估:
通过分析生产与消费的行数、字节数比例,评估并行执行的整体效率。
3. 字段含义详解
以下是 V$PQ_SYSSTAT 视图中各个字段的精确说明。其结构与 V$PQ_SESSTAT 类似,但统计范围是实例级别。
| 字段名 | 数据类型 | 含义说明 |
|---|---|---|
| STATISTIC | VARCHAR2(64) | 并行查询统计项目的名称。这是查询时的主要标识。 |
| VALUE | NUMBER | 该统计项目自实例启动以来的累计值。其单位取决于具体的统计项。 |
| CON_ID | NUMBER | 包含此统计信息的容器的 ID。在 CDB 环境中,指示该数据属于哪个 PDB。 |
核心统计项(STATISTIC 列的值)详解:
| 统计项名称 | 含义说明 |
|---|---|
| Servers Busy | 当前繁忙的并行服务器进程的数量。这是一个实时快照值。高值表示系统并行负载高。 |
| Servers Idle | 当前空闲的并行服务器进程的数量。 |
| Servers Started | 自实例启动以来,已启动的并行服务器进程的总次数。频繁的启动/关闭可能有性能开销。 |
| Servers Shutdown | 自实例启动以来,已关闭的并行服务器进程的总次数。 |
| Servers Highwater | 自实例启动以来,并行服务器进程同时活跃数量的峰值。这直接反映了对 PARALLEL_MAX_SERVERS 参数的需求。 |
| Server Sessions | 自实例启动以来,由并行服务器进程建立的会话总数。 |
| Queries Initiated | 自实例启动以来,发起的并行查询操作的总次数。 |
| DML Initiated | 自实例启动以来,发起的并行 DML 操作的总次数。 |
| DDL Initiated | 自实例启动以来,发起的并行 DDL 操作的总次数。 |
| Local Msgs Sent | 在实例内发送的进程间消息总数(在 RAC 中,指同一实例内进程间通信)。 |
| Local Msgs Recv’d | 在实例内接收的进程间消息总数。 |
| Distr Msgs Sent | 跨实例发送的进程间消息总数(在 RAC 中,指通过互联网络跨实例通信)。 |
| Distr Msgs Recv’d | 跨实例接收的进程间消息总数。 |
| Data Bytes Sent | 通过并行进程间通信发送的数据总字节数。反映了并行处理的数据量规模。 |
| Data Bytes Recv’d | 通过并行进程间通信接收的数据总字节数。 |
| Rows Produced | 所有并行操作中,产生的数据行的总数。 |
| Rows Consumed | 所有并行操作中,消费的数据行的总数。 |
4. 相关视图与基表
-
相关动态性能视图:
V$PQ_SESSTAT:提供会话级别的并行统计。V$PQ_SYSSTAT可以看作是所有V$PQ_SESSTAT的汇总。V$PQ_SLAVE/V$PX_PROCESS:提供并行服务器进程的实时状态信息。V$PQ_SYSSTAT中的Servers Busy/Idle是其快照汇总。V$SYSSTAT:包含更广泛的系统统计信息,其中有一些与并行查询相关的统计项(如parallel operations not downgraded),可以与V$PQ_SYSSTAT协同分析。GV$视图:在 RAC 环境中,GV$PQ_SYSSTAT提供所有实例的视图,是分析集群范围内并行负载的关键。
-
底层基表与原理:
V$PQ_SYSSTAT是一个动态性能视图,其数据不直接来源于普通的磁盘基表。- 数据源:其数据由所有并行查询协调器(QC)进程和并行执行服务器在操作执行过程中动态更新。这些统计信息被聚合后存储在 SGA 的共享内存结构中。
- 生命周期与持久化:这些统计信息是实例级别的。它们在实例启动时被初始化为0,并在实例运行期间持续累积。实例关闭后,所有统计信息被重置。它们不会被持久化到AWR仓库中,但AWR会快照这些值并报告差值。
- 底层结构:其底层来源于内部的
X$表(如X$KCFIOS),这些表在查询时动态映射到SGA中的内存结构。
5. 详细原理与知识点
1. 系统级监控的意义:
V$PQ_SYSSTAT 提供了评估并行查询框架本身健康度和压力的视角。例如:
Servers Highwater:如果这个值持续接近PARALLEL_MAX_SERVERS的设定值,说明系统可能经历过或正在经历并行服务器进程资源的争用,需要考虑调大该参数。Servers StartedvsQueries Initiated:如果比值过高,说明平均每个查询启动/关闭的进程很频繁,可能意味着有很多小查询不必要地使用了并行,或者PARALLEL_MIN_SERVERS设置过低,导致进程池无法保持 warm。
2. RAC 环境下的关键指标:
在 RAC 中,Distr Msgs 和 Local Msgs 的对比至关重要。
Local Msgs远大于Distr Msgs:表明大多数并行操作是实例内完成的,这是理想状态。Distr Msgs占比很高:表明有大量的跨实例并行操作。这不一定不好,但如果互联网络成为瓶颈(可通过GV$SYSTEM_EVENT查看'gc%'等待事件),就需要考虑使用服务(Services) 来绑定工作和数据到特定实例(Affinity),减少跨实例流量。
3. 资源消耗的宏观视角:
Data Bytes Sent/Recv'd 和 Rows Produced/Consumed 以巨大的数字展现了实例所处理的并行数据总量。这对于理解工作负载特征和容量规划极具价值。
4. 与 AWR 的关系:
虽然 V$PQ_SYSSTAT 本身是易失的,但 AWR 快照会捕获其在快照间隔内的差值。AWR 报告中的 “Load Profile” 和 “Instance Efficiency Percentages” 部分的一些数据(如 Parallel operations per second)就来源于此。
6. 常用查询SQL
1. 查看实例关键的并行查询统计信息概览
SELECT statistic,
value,
CASE
WHEN statistic LIKE '%Bytes%' THEN ROUND(value / 1024 / 1024) || ' MB'
WHEN statistic LIKE '%Servers%' THEN TO_CHAR(value)
ELSE TO_CHAR(value)
END AS formatted_value
FROM v$pq_sysstat
WHERE statistic IN ('Servers Busy', 'Servers Idle', 'Servers Highwater',
'Queries Initiated', 'Data Bytes Sent', 'Rows Produced')
ORDER BY statistic;
2. 计算并行服务器进程的"繁忙率"(粗略评估)
SELECT
SUM(CASE statistic WHEN 'Servers Busy' THEN value END) AS busy_servers,
SUM(CASE statistic WHEN 'Servers Idle' THEN value END) AS idle_servers,
ROUND(
SUM(CASE statistic WHEN 'Servers Busy' THEN value END) /
NULLIF(SUM(CASE statistic WHEN 'Servers Busy' THEN value END) +
SUM(CASE statistic WHEN 'Servers Idle' THEN value END), 0) * 100,
2
) AS approximate_busy_percentage
FROM v$pq_sysstat;
-- 注意:这是一个瞬间快照,仅作参考。
3. 评估RAC环境中的并行通信模式
SELECT
SUM(CASE statistic WHEN 'Local Msgs Sent' THEN value END)
+ SUM(CASE statistic WHEN 'Local Msgs Recv''d' THEN value END) AS total_intra_instance_msgs,
SUM(CASE statistic WHEN 'Distr Msgs Sent' THEN value END)
+ SUM(CASE statistic WHEN 'Distr Msgs Recv''d' THEN value END) AS total_inter_instance_msgs,
ROUND(
(SUM(CASE statistic WHEN 'Distr Msgs Sent' THEN value END) +
SUM(CASE statistic WHEN 'Distr Msgs Recv''d' THEN value END)) /
NULLIF( (SUM(CASE statistic WHEN 'Local Msgs Sent' THEN value END) +
SUM(CASE statistic WHEN 'Local Msgs Recv''d' THEN value END) +
SUM(CASE statistic WHEN 'Distr Msgs Sent' THEN value END) +
SUM(CASE statistic WHEN 'Distr Msgs Recv''d' THEN value END) ), 0 ) * 100,
2
) AS pct_inter_instance_comm
FROM v$pq_sysstat;
4. 监控并行执行的吞吐量(需定期运行并计算差值)
-- 第一次运行
SELECT 'BASE' AS snap,
SYSDATE AS time,
SUM(CASE statistic WHEN 'Rows Produced' THEN value END) AS total_rows,
SUM(CASE statistic WHEN 'Data Bytes Sent' THEN value END) AS total_bytes
FROM v$pq_sysstat;
-- 等待一段时间后(如5分钟),第二次运行
SELECT 'COMPARE' AS snap,
SYSDATE AS time,
SUM(CASE statistic WHEN 'Rows Produced' THEN value END) AS total_rows,
SUM(CASE statistic WHEN 'Data Bytes Sent' THEN value END) AS total_bytes
FROM v$pq_sysstat;
-- 手动计算差值: (COMPARE - BASE) / 时间间隔(秒) = 每秒吞吐量
总结
V$PQ_SYSSTAT 视图是 Oracle 实例并行查询活动的“飞行数据记录仪”。它提供了评估并行查询框架整体健康状况和性能表现的宏观、累积性视角。通过它,可以:
- 把握全局负载:快速了解实例的并行查询总体繁忙程度和资源消耗规模。
- 指导资源配置:根据历史峰值(
Servers Highwater)和进程周转率(Servers Started)科学地设置并行相关参数。 - 识别潜在瓶颈:从系统层面识别出诸如跨实例通信过多、并行进程资源争用等问题。
- 量化处理能力:以字节和行数为单位,度量实例处理并行工作负载的总能力。
对于管理数据仓库、报表系统等重度依赖并行执行的环境的DBA来说,将 V$PQ_SYSSTAT 纳入日常监控体系,是进行容量管理、性能评估和瓶颈分析的基础。
欢迎关注我的公众号《IT小Chen》
321

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



