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

在这里插入图片描述
好的,我们来对 Oracle 19C 中的 V$PROCESS_GROUP 动态性能视图进行一次全面、深入的详解。这个视图与进程的资源管理密切相关,比 V$PROCESS 更为专精。

1. 作用与概述

V$PROCESS_GROUP 动态性能视图提供了数据库中进程组(Process Groups) 的实时信息。它与 Oracle 数据库的 Resource Manager(资源管理器) 功能紧密集成。

核心作用:展示进程如何被资源管理器分组、监控和管理。资源管理器可以基于“进程组”这一抽象概念来分配CPU、限制并行度、管理Exadata I/O等,而不是仅仅针对单个会话或进程。V$PROCESS_GROUP 就是查看这些分组成员关系和组内资源消耗情况的窗口。

2. 使用场景

  1. 监控资源管理器的效果:查看哪些进程被分配到了哪个资源消费者组(Consumer Group)下的进程组中,以及它们消耗的CPU等资源情况。
  2. 诊断性能问题与资源竞争:当某个会话的响应变慢时,可以检查其所在的进程组是否受到了资源管理器规则的限制(如CPU使用率被限制)。
  3. 验证资源计划配置:确认当前的资源计划(Resource Plan)是否按预期将进程划分到了正确的组中。
  4. Exadata 环境下的I/O资源管理:在Exadata系统中,I/O资源管理(IORM)同样依赖于进程组的概念来管理跨数据库和Pluggable Database (PDB)的I/O资源分配。

3. 字段含义详解

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

| 字段名 | 类型 | 含义详解 |
| :— | :— | :— |
| GROUP_ID | NUMBER | 进程组标识符:在数据库实例内唯一标识一个进程组的数字。注意:这与资源消费者组(Consumer Group)的ID不同。 |
| POLICY | VARCHAR2(11) | 进程组策略:指明该进程组是为何种资源管理目的而创建的。重要值包括:
- CPU:为了CPU资源管理而创建。
- PARALLEL:为了并行查询从属进程的管理而创建。
- EXADATA_IO:为了管理Exadata系统中的I/O资源而创建。
- OTHER:用于其他目的。 |
| CONSUMER_GROUP_ID | NUMBER | 资源消费者组标识符:此进程组所关联的资源消费者组的ID。可以与 DBA_RSRC_CONSUMER_GROUPSV$RSRC_CONSUMER_GROUP 视图关联,以获取消费者组名称(如 OLTP_GROUP, BATCH_GROUP)。这是连接进程组与资源管理器的关键字段。 |
| CPU_TIME | NUMBER | CPU时间(毫秒):此进程组中所有进程消耗的CPU总时间(以毫秒为单位)。 |
| CPU_TIME_NORM | NUMBER | 归一化的CPU时间:经过归一化处理后的CPU时间,用于在不同类别的进程之间进行公平的资源比较和分配。 |
| CPU_TIME_MAX | NUMBER | 最大CPU时间(毫秒):此进程组允许使用的最大CPU时间(如果有限制的话)。 |
| EFFECTIVE_CPU_PERCENT | NUMBER | 有效CPU百分比:此进程组实际能够使用的CPU资源占其请求资源的百分比。如果值低于100%,表明该组正在受到资源管理器CPU分配规则的限制。 |
| AVG_EFFECTIVE_CPU_PERCENT | NUMBER | 平均有效CPU百分比:一段时间内的平均有效CPU百分比。 |
| PROCESS_COUNT | NUMBER | 进程计数:当前属于此进程组的操作系统进程的数量。 |
| PARALLEL_SERVER_COUNT | NUMBER | 并行服务器进程数:如果策略是PARALLEL,此字段表示该并行语句使用的并行从属进程的数量。 |

4. 相关视图与基表

  • V$SESSION / V$PROCESSV$PROCESS_GROUP 管理的是进程,可以通过这些视图找到组内具体是哪些会话和进程。关联关系需要通过内部机制,通常不是直接字段关联。
  • V$RSRC_CONSUMER_GROUP最重要的相关视图。通过 CONSUMER_GROUP_ID 字段关联,可以查看进程组所属的资源消费者组的详细信息(如名称、当前状态、CPU等待时间等)。
  • DBA_RSRC_CONSUMER_GROUPS:数据字典视图,显示资源消费者组的静态配置信息。
  • V$RSRC_PLAN:显示当前活动的资源计划。
  • 基表 (Underlying Table)V$PROCESS_GROUP 的数据来源于实例内存结构(SGA)。其底层 X表∗∗通常是∗∗‘X表** 通常是 **`X通常是XKSUPRG` (Kernel Serial Process Group Table)。与所有X$表一样,它是Oracle内部的、未公开文档化的结构,强烈不建议直接查询。

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

  1. Resource Manager (资源管理器) 原理

    • Oracle资源管理器允许DBA在数据库内部分配和管理系统资源(主要是CPU和Exadata I/O),防止某些任务过度消耗资源而影响关键业务。
    • 其核心结构是:资源计划 (Resource Plan) -> 资源消费者组 (Consumer Group) -> 进程组 (Process Group)
    • 会话根据其属性(如SESSION_ATTRIBUTES)被映射到一个资源消费者组。当会话开始执行工作时,资源管理器会为其进程创建一个或多个进程组,作为资源分配和统计的单位。
  2. 进程组的作用

    • 资源分配单元:资源管理器以进程组为单位进行CPU时间片的分配和调度。一个消费者组下可以有多个进程组。
    • 统计容器:组内所有进程消耗的CPU、发出的I/O等资源会被聚合统计,方便资源管理器根据计划进行决策和限制。
    • 管理并行查询:对于并行执行,协调进程(QC)和所有从属进程(Slaves)会被放入同一个进程组(POLICY='PARALLEL'),确保它们作为一个整体被管理,防止单个从属进程占用过多资源。
  3. 工作流程

    1. 一个会话开始执行(例如,执行一条SQL)。
    2. 资源管理器根据规则决定该会话属于哪个消费者组(例如BATCH_GROUP)。
    3. 资源管理器为此工作单元创建一个进程组(或复用现有的),并将其与BATCH_GROUP关联。
    4. 执行该工作的服务器进程被放入此进程组。
    5. 进程运行时,其消耗的CPU时间会被累加到该进程组的CPU_TIME字段。
    6. 资源管理器每隔一段时间检查所有活跃的进程组,根据活动资源计划的指令(如BATCH_GROUP最多只能使用20%的CPU),来调整各进程组的调度优先级,甚至暂停其运行,从而实现资源限制。EFFECTIVE_CPU_PERCENT字段就反映了这一限制的结果。

6. 常用查询 SQL

1. 查看所有进程组及其关联的消费者组
这是最基础的查询,展示了资源管理的整体框架。

SELECT pg.group_id,
       pg.policy,
       pg.consumer_group_id,
       cg.consumer_group,
       pg.process_count,
       pg.cpu_time,
       pg.effective_cpu_percent
FROM v$process_group pg
JOIN v$rsrc_consumer_group cg ON pg.consumer_group_id = cg.consumer_group_id
ORDER BY pg.policy, pg.group_id;

2. 查看受CPU限制的进程组
查找那些有效CPU百分比低于100%的组,这些组正在被资源管理器限制。

SELECT pg.group_id,
       cg.consumer_group,
       pg.cpu_time,
       pg.effective_cpu_percent,
       pg.avg_effective_cpu_percent
FROM v$process_group pg
JOIN v$rsrc_consumer_group cg ON pg.consumer_group_id = cg.consumer_group_id
WHERE pg.policy = 'CPU'
  AND pg.effective_cpu_percent < 100
ORDER BY pg.effective_cpu_percent;

3. 监控并行查询的进程组
查看正在执行的并行语句所使用的资源。

SELECT pg.group_id,
       cg.consumer_group,
       pg.parallel_server_count,
       pg.cpu_time
FROM v$process_group pg
JOIN v$rsrc_consumer_group cg ON pg.consumer_group_id = cg.consumer_group_id
WHERE pg.policy = 'PARALLEL';

4. 结合V$SESSION查找特定会话所在的进程组
(此查询较为复杂,因为关联不是直接的,通常需要结合内部轨迹或特定条件,以下为一个思路)

-- 这个查询不一定总能找到结果,因为并非所有会话都处于被资源管理器 actively管理的状态。
-- 首先找到你感兴趣的SID
SELECT sid, username, service_name, module, action
FROM v$session WHERE ...;

-- 然后,可以通过跟踪或日志分析,但更实际的方法是观察资源消耗:
-- 查看当前哪个消费者组/进程组最活跃,并推测你的会话可能在哪个组里。
SELECT s.sid, cg.consumer_group, pg.policy, pg.cpu_time
FROM v$session s, v$rsrc_consumer_group cg, v$process_group pg
WHERE s.resource_consumer_group = cg.name
AND cg.consumer_group_id = pg.consumer_group_id
AND s.sid = &your_sid;

总结

V$PROCESS_GROUP 视图是深入理解和管理 Oracle Resource Manager 的关键。它将抽象的资源管理策略(计划、消费者组)与具体的操作系统进程执行联系起来,通过“进程组”这一实体进行资源的计量、调度和限制。通过查询此视图,DBA可以验证资源计划是否生效、诊断因资源限制导致的性能问题,并优化资源在不同工作负载间的分配,从而确保数据库服务的稳定性和可预测性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值