
Oracle 19c V$ACTIVE_SESS_POOL_MTH 动态性能视图详解
核心作用
V$ACTIVE_SESS_POOL_MTH 是 Oracle 资源管理器(Resource Manager)的关键组件,主要用于:
- 监控活动会话池状态:实时跟踪资源消费者组的活动会话使用情况
- 实施会话限制:强制执行资源消费者组的活动会话上限
- 管理会话队列:控制等待执行的会话排队行为
- 优化资源分配:确保关键应用获得所需数据库资源
- 防止资源耗尽:避免单个用户组消耗所有数据库资源
📌 注意:该视图名称在 Oracle 19c 文档中应为
V$RSRC_CONSUMER_GROUP(包含活动会话池信息),V$ACTIVE_SESS_POOL_MTH可能是历史命名或特定版本别名。以下内容基于资源管理器的活动会话池功能。
关键特性
- 实时监控:提供当前活动会话池状态
- 消费者组聚焦:按资源消费者组组织数据
- 队列管理:显示等待执行的会话信息
- 阈值报警:标识接近或超过限制的消费者组
- 多租户支持:在CDB/PDB环境中有效工作
字段详解(资源管理器活动会话池相关字段)
基础标识字段
| 字段名 | 数据类型 | 描述 |
|---|---|---|
NAME | VARCHAR2(64) | 资源消费者组名称 |
CONSUMER_GROUP_ID | NUMBER | 资源消费者组的唯一数字ID |
ACTIVE_SESSIONS | NUMBER | 当前活动会话数:正在执行的会话数量 |
EXECUTION_WAITERS | NUMBER | 等待执行的会话数:达到上限后排队等待的会话数量 |
QUEUED_TIMEOUTS | NUMBER | 超时会话数:因等待超时而被终止的会话数量 |
资源使用字段
| 字段名 | 数据类型 | 描述 |
|---|---|---|
CPU_WAIT_TIME | NUMBER | CPU等待总时间(毫秒) |
CONSUMED_CPU_TIME | NUMBER | 消耗的CPU总时间(毫秒) |
CPU_WAITS | NUMBER | CPU等待次数 |
YIELDS | NUMBER | 资源让步次数 |
会话池配置字段
| 字段名 | 数据类型 | 描述 |
|---|---|---|
ACTIVE_SESS_POOL_P1 | NUMBER | 活动会话池大小:允许的最大并发活动会话数 |
QUEUEING_P1 | NUMBER | 队列超时时间:会话在队列中的最大等待时间(秒) |
基表与底层原理
底层结构:X$KJRSRCG(内核资源组统计表)
数据来源:
- 资源管理器配置(
DBMS_RESOURCE_MANAGER) - 会话活动监控
- 资源分配决策引擎
工作原理:
- 资源管理器根据定义的资源计划分配资源
- 每个资源消费者组有活动会话池限制
- 当活动会话数达到上限时,新会话进入队列
- 排队会话在超时前等待可用槽位
- 系统实时更新统计信息到内存结构
V$RSRC_CONSUMER_GROUP提供这些统计的可读视图
资源管理流程:
核心使用场景
1. 实时资源监控
SELECT name, active_sessions, execution_waiters
FROM v$rsrc_consumer_group;
2. 消费者组容量规划
SELECT name,
active_sessions,
active_sess_pool_p1 AS max_limit,
ROUND(active_sessions / active_sess_pool_p1 * 100, 2) AS usage_pct
FROM v$rsrc_consumer_group;
3. 队列拥塞诊断
SELECT name, execution_waiters, queued_timeouts
FROM v$rsrc_consumer_group
WHERE execution_waiters > 0 OR queued_timeouts > 0;
4. 资源瓶颈分析
SELECT name, cpu_wait_time, cpu_waits, yields
FROM v$rsrc_consumer_group
ORDER BY cpu_wait_time DESC;
常用查询 SQL 示例
1. 活动会话池状态概览
SELECT name AS consumer_group,
active_sessions AS current_active,
active_sess_pool_p1 AS max_active,
execution_waiters AS waiting_sessions,
queued_timeouts AS timed_out_sessions
FROM v$rsrc_consumer_group
ORDER BY active_sessions DESC;
2. 资源组利用率分析
SELECT name,
active_sessions,
active_sess_pool_p1,
CASE
WHEN active_sess_pool_p1 = 0 THEN 0
ELSE ROUND(active_sessions / active_sess_pool_p1 * 100)
END AS utilization_pct,
execution_waiters,
queued_timeouts
FROM v$rsrc_consumer_group
WHERE active_sess_pool_p1 > 0;
3. 排队会话详情
SELECT s.sid, s.serial#, s.username, s.program, s.event, s.seconds_in_wait
FROM v$session s
JOIN v$rsrc_session_info rsi ON s.sid = rsi.sid
WHERE rsi.current_consumer_group_id = (
SELECT consumer_group_id
FROM v$rsrc_consumer_group
WHERE name = 'OLTP_GROUP' -- 替换为你的消费者组名
)
AND rsi.session_type = 'FOREGROUND'
AND rsi.state = 'WAITING';
4. 超时会话历史分析
SELECT name, queued_timeouts,
TO_CHAR(SYSDATE - (queued_timeouts * interval '1' minute), 'YYYY-MM-DD HH24:MI') last_timeout
FROM v$rsrc_consumer_group
WHERE queued_timeouts > 0;
5. 资源组CPU使用对比
SELECT name,
consumed_cpu_time AS cpu_used,
cpu_wait_time AS cpu_wait,
ROUND(cpu_wait_time / NULLIF(consumed_cpu_time, 0) * 100, 2) AS wait_ratio
FROM v$rsrc_consumer_group
ORDER BY consumed_cpu_time DESC;
资源管理器配置示例
1. 创建资源消费者组
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
CONSUMER_GROUP => 'REPORTING_GROUP',
COMMENT => 'Reporting applications');
END;
2. 配置活动会话池
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
PLAN => 'NIGHT_PLAN',
GROUP_OR_SUBPLAN => 'REPORTING_GROUP',
COMMENT => 'Reporting group limits',
ACTIVE_SESS_POOL_P1 => 20, -- 最大20个活动会话
QUEUEING_P1 => 300); -- 超时时间300秒
END;
3. 分配用户到消费者组
BEGIN
DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
ATTRIBUTE => DBMS_RESOURCE_MANAGER.ORACLE_USER,
VALUE => 'REPORT_USER',
CONSUMER_GROUP => 'REPORTING_GROUP');
END;
性能优化建议
1. 容量规划公式
推荐最大活动会话数 = (CPU核心数 × 4) / 消费者组数量
2. 超时设置指南
| 应用类型 | 推荐超时时间 | 说明 |
|---|---|---|
| OLTP | 30-60秒 | 快速响应应用 |
| 报表 | 300-600秒 | 允许较长的排队时间 |
| 批处理 | 1800秒 | 长时间运行任务 |
3. 异常处理策略
-- 检测并报警资源组饱和
SELECT name
FROM v$rsrc_consumer_group
WHERE active_sessions >= active_sess_pool_p1 * 0.9 -- 达到90%容量
AND active_sess_pool_p1 > 0;
重要注意事项
- 权限要求:需要
ADMINISTER_RESOURCE_MANAGER权限 - 企业版特性:仅Oracle企业版提供完整资源管理器功能
- 动态调整:资源计划修改需要激活才生效
- 多租户考虑:
- CDB级别:管理整个容器资源
- PDB级别:管理单个PDB资源
- 性能影响:资源管理器增加约3-5%开销
- 诊断工具:
-- 查看资源管理器统计 SELECT * FROM v$rsrcmgrmetric; -- 查看历史资源统计 SELECT * FROM dba_hist_rsrc_consumer_group;
典型问题解决方案
问题:报表查询因资源限制频繁超时
解决方案:
-- 1. 增加活动会话池大小
BEGIN
DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE(
PLAN => 'DAY_PLAN',
GROUP_OR_SUBPLAN => 'REPORTS_GROUP',
NEW_ACTIVE_SESS_POOL_P1 => 30);
END;
-- 2. 延长超时时间
BEGIN
DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE(
PLAN => 'DAY_PLAN',
GROUP_OR_SUBPLAN => 'REPORTS_GROUP',
NEW_QUEUEING_P1 => 600);
END;
通过 V$RSRC_CONSUMER_GROUP 及其活动会话池相关字段,DBA可以有效地监控、调整和优化数据库资源分配,确保关键业务获得所需资源,同时防止资源滥用导致系统性能下降。
欢迎关注我的公众号《IT小Chen》

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



