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

在这里插入图片描述

Oracle 19c V$ACTIVE_SESS_POOL_MTH 动态性能视图详解

核心作用

V$ACTIVE_SESS_POOL_MTH 是 Oracle 资源管理器(Resource Manager)的关键组件,主要用于:

  1. 监控活动会话池状态:实时跟踪资源消费者组的活动会话使用情况
  2. 实施会话限制:强制执行资源消费者组的活动会话上限
  3. 管理会话队列:控制等待执行的会话排队行为
  4. 优化资源分配:确保关键应用获得所需数据库资源
  5. 防止资源耗尽:避免单个用户组消耗所有数据库资源

📌 注意:该视图名称在 Oracle 19c 文档中应为 V$RSRC_CONSUMER_GROUP(包含活动会话池信息),V$ACTIVE_SESS_POOL_MTH 可能是历史命名或特定版本别名。以下内容基于资源管理器的活动会话池功能。

关键特性

  • 实时监控:提供当前活动会话池状态
  • 消费者组聚焦:按资源消费者组组织数据
  • 队列管理:显示等待执行的会话信息
  • 阈值报警:标识接近或超过限制的消费者组
  • 多租户支持:在CDB/PDB环境中有效工作

字段详解(资源管理器活动会话池相关字段)

基础标识字段
字段名数据类型描述
NAMEVARCHAR2(64)资源消费者组名称
CONSUMER_GROUP_IDNUMBER资源消费者组的唯一数字ID
ACTIVE_SESSIONSNUMBER当前活动会话数:正在执行的会话数量
EXECUTION_WAITERSNUMBER等待执行的会话数:达到上限后排队等待的会话数量
QUEUED_TIMEOUTSNUMBER超时会话数:因等待超时而被终止的会话数量
资源使用字段
字段名数据类型描述
CPU_WAIT_TIMENUMBERCPU等待总时间(毫秒)
CONSUMED_CPU_TIMENUMBER消耗的CPU总时间(毫秒)
CPU_WAITSNUMBERCPU等待次数
YIELDSNUMBER资源让步次数
会话池配置字段
字段名数据类型描述
ACTIVE_SESS_POOL_P1NUMBER活动会话池大小:允许的最大并发活动会话数
QUEUEING_P1NUMBER队列超时时间:会话在队列中的最大等待时间(秒)

基表与底层原理

底层结构X$KJRSRCG(内核资源组统计表)

数据来源

  1. 资源管理器配置(DBMS_RESOURCE_MANAGER
  2. 会话活动监控
  3. 资源分配决策引擎

工作原理

  1. 资源管理器根据定义的资源计划分配资源
  2. 每个资源消费者组有活动会话池限制
  3. 当活动会话数达到上限时,新会话进入队列
  4. 排队会话在超时前等待可用槽位
  5. 系统实时更新统计信息到内存结构
  6. 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. 超时设置指南
应用类型推荐超时时间说明
OLTP30-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;

重要注意事项

  1. 权限要求:需要 ADMINISTER_RESOURCE_MANAGER 权限
  2. 企业版特性:仅Oracle企业版提供完整资源管理器功能
  3. 动态调整:资源计划修改需要激活才生效
  4. 多租户考虑
    • CDB级别:管理整个容器资源
    • PDB级别:管理单个PDB资源
  5. 性能影响:资源管理器增加约3-5%开销
  6. 诊断工具
    -- 查看资源管理器统计
    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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值