Oracle 资源管理器(Resource Manager)与I/O校准(I/O Calibrate)

在这里插入图片描述我将为您深入解析Oracle数据库两大关键的内部分配与优化机制:资源管理器(Resource Manager)I/O校准(I/O Calibrate)。它们分别从“软件”和“硬件”两个维度,确保数据库工作负载能够高效、稳定地运行。


第一部分:资源管理器 (Resource Manager) - 官方的交通管制系统

一、官方定义与核心作用
  • 官方定义:Oracle资源管理器(DBRM)允许您在数据库实例内部管理和管理系统资源(主要是CPU和并行度)的分配。它提供了一种将资源分配给不同会话组的方法,从而在资源争用时确保优先级更高的任务获得所需资源。
  • 核心作用
    1. 资源分配:将CPU时间按比例分配给不同类型的用户或应用程序。
    2. 限制并发度:控制特定组可以使用的最大并行服务器进程数量。
    3. 执行时间控制:估算查询运行时间,并主动终止或切换低优先级的长时运行查询。
    4. 会话池管理:限制特定用户组可以同时处于活动状态的会话数。
    5. 自动化维护任务管理:在Oracle 12c及更高版本中,可以限制自动化后台任务(如统计信息收集)的资源使用,避免其对核心业务造成影响。

通俗比喻
将数据库实例比作一个城市的道路系统

  • 没有资源管理器:所有车辆(会话/请求)无序地挤在路上,一旦发生拥堵(资源争用),救护车(关键业务)也可能被堵死。
  • 启用资源管理器:它就像一个智能交通管制系统,设立了公交专用道(高优先级资源组)、限制了货车的上路时间和数量(限制并发度),并确保在任何情况下,应急车辆都有绝对优先通行权。
二、深入底层原理与管理机制

1. 核心架构:三级资源分配模型

资源管理器通过三个核心概念进行工作:

  • 资源使用者组 (Resource Consumer Group):这是资源分配的受体。它将具有相似资源需求的会话分类。例如:OLAP_GROUP(报表用户)、OLTP_GROUP(交易用户)、BATCH_GROUP(批处理作业)、ADMIN_GROUP(管理员)。
  • 资源计划 (Resource Plan):这是资源分配的蓝图。它定义了资源如何在各个使用者组之间进行分配。一个计划包含多个指令(Directives)
  • 资源计划指令 (Resource Plan Directive):这是连接计划和组的桥梁,并指定了具体的分配规则。例如:“在DAYTIME计划中,将60%的CPU分配给OLTP_GROUP,将30%的CPU分配给OLAP_GROUP,并限制BATCH_GROUP最多只能使用5个并行进程”。

2. 底层工作机制:

  • 调度器 (Scheduler):资源管理器不是持续运行的,而是由内核每秒唤醒多次(例如10次)。在每次唤醒时,它都会检查所有活动会话。
  • CPU分配算法:它采用基于优先级的轮询调度。例如,如果一个计划指令规定GROUP_AGROUP_B的CPU比例是3:1,那么调度器会在一个时间片内,优先从GROUP_A中选取3个会话执行,然后从GROUP_B中选取1个会话执行,如此循环。
  • 强制执行:当一个组使用的资源超过其分配额度时,该组中的会话会被临时切换出运行队列(SWITCHED OUT),直到下一个调度周期到来。这确保了没有任何一个组可以独占资源。

3. 管理机制:

  • 创建与激活
    1. 使用DBMS_RESOURCE_MANAGER包创建组、计划、指令。
    2. 通过ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'DAYTIME';激活计划。
  • 会话分配:可以手动将会话切换到指定组,或通过映射规则(Mapping Rules) 根据会话属性(如用户名、服务名、模块名)自动分配。

4. 举例说明:
假设一个电商数据库,需要在白天保证交易流畅,夜间运行批量报表。

  1. 创建组OLTP_GROUP, REPORT_GROUP
  2. 创建日间计划DAY_PLAN
    • 指令1:OLTP_GROUP -> CPU占比 80%
    • 指令2:REPORT_GROUP -> CPU占比 20%,并行度限制为4
  3. 创建夜间计划NIGHT_PLAN
    • 指令1:OLTP_GROUP -> CPU占比 20%
    • 指令2:REPORT_GROUP -> CPU占比 80%,并行度限制为16
  4. 设置映射规则:将服务名SALES_APP的会话自动分配给OLTP_GROUP;将用户ETL_USER自动分配给REPORT_GROUP
  5. 激活计划:通过Oracle Scheduler或手动命令,在早上7点激活DAY_PLAN,晚上10点激活NIGHT_PLAN

效果:白天大量用户购物时,报表查询最多只能占用20%的CPU,且不会用大量并行进程冲击系统。夜间,批量报表任务可以全力运行,快速完成。


第二部分:I/O校准 (I/O Calibrate) - 官方的存储性能探测仪

一、官方定义与核心作用
  • 官方定义:I/O校准是通过运行一个受控的I/O密集型工作负载来评估存储子系统性能(吞吐量和I/O延迟)的过程。它通过DBMS_RESOURCE_MANAGER.CALIBRATE_IO过程实现。
  • 核心作用
    1. 量化性能:提供存储系统的两个关键性能指标:最大IOPS(每秒随机读取I/O操作数)和最大MBPS(每秒连续读取的数据量,MB)。
    2. 提供决策依据:为数据库智能基础设施(如智能扫描、In-Memory特性)和DBA的容量规划提供准确的性能数据。优化器(CBO)在评估全表扫描成本时,也会参考这些数据。
    3. 发现瓶颈:帮助识别存储配置是否存在问题(例如,磁盘数量不足、HBA卡或交换机带宽瓶颈)。

通俗比喻
I/O校准就像给数据库存储做一次专业的“体能测试”

  • 没有校准:你只知道你的存储是“快”还是“慢”,这是一种模糊的感觉。你不知道是“百米速度快”(高IOPS)还是“马拉松耐力好”(高MBPS),也不知道极限在哪里。
  • 进行校准:你让存储以最大强度分别进行“冲刺跑”(随机读,测IOPS)和“长跑”(顺序读,测MBPS),并用仪器记录下精确的成绩。以后训练(优化和规划)就有了科学依据。
二、深入底层原理与管理机制

1. 校准过程详解:

DBMS_RESOURCE_MANAGER.CALIBRATE_IO(<num_physical_disks>, <max_latency>, iops, mbps, lat);

  • 工作负载:该过程会向数据库数据文件发起两种类型的I/O请求
    1. 随机读(Random I/O):主要是1MB大小的随机读取,用于测试IOPS。这代表了OLTP类型负载的性能。
    2. 顺序读(Sequential I/O):主要是1MB大小的顺序读取,用于测试MBPS。这代表了数据仓库全表扫描类型负载的性能。
  • 逐步加压:校准过程会逐渐增加并发I/O请求的数量(Outstanding I/O),直到存储系统的延迟(Latency)超过用户指定的阈值(max_latency,默认20毫秒)或无法再提升吞吐量。
  • 测量峰值:整个过程会持续几分钟,最终报告在可接受延迟下的最大IOPS和MBPS。

2. 重要前提与依赖:

  • 必须使用异步I/O:校准依赖FILESYSTEMIO_OPTIONS设置为SETALLASYNCH。如果使用同步I/O,结果将不准确。
  • 代表性数据文件:校准产生的I/O会均匀分布在所有数据库数据文件上。因此,数据文件必须分布在所有待测试的存储设备上,才能反映整体性能。
  • 独占访问:校准应在系统空闲时段进行,因为它会消耗大量I/O资源,可能影响生产业务。同时,其他活跃的I/O也会使校准结果失真。

3. 举例说明:
DBA执行以下命令:

DECLARE
   v_iops NUMBER;
   v_mbps NUMBER;
   v_lat NUMBER;
BEGIN
   DBMS_RESOURCE_MANAGER.CALIBRATE_IO( /*num_physical_disks*/ 8,
                                      /*max_latency*/ 10,
                                      v_iops, v_mbps, v_lat);
   DBMS_OUTPUT.PUT_LINE('Max IOPS = ' || v_iops);
   DBMS_OUTPUT.PUT_LINE('Max MBPS = ' || v_mbps);
   DBMS_OUTPUT.PUT_LINE('Latency = ' || v_lat);
END;
/

输出Max IOPS = 1500, Max MBPS = 500
解读:该存储系统在平均延迟10ms的情况下,每秒最多可完成1500次随机读操作,或提供500MB/s的顺序读带宽。如果业务需求的IOPS是2000,那么当前存储配置就是瓶颈。


第四部分:争用、排查与常用SQL

资源管理器相关
  • 争用场景:当资源计划指令设置过于严格,高优先级组资源过剩而低优先级组资源严重不足时,低优先级组的会话可能会经历更长的等待
  • 等待事件resmgr:cpu quantum。这个等待事件表示会话正在等待资源管理器分配给它CPU时间片。看到这个事件是正常的,这正是资源管理器在工作的证明。但如果该等待在低优先级组中占比过高,说明资源分配可能需要调整。
  • 监控SQL
    -- 查看当前活动的资源计划
    SELECT NAME, IS_TOP_PLAN FROM V$RSRC_PLAN;
    
    -- 查看各消费者组的资源使用统计和等待情况
    SELECT CONSUMER_GROUP_NAME, CPU_WAIT_TIME, CPU_WAITS, CONSUMED_CPU_TIME, REQUESTS
    FROM V$RSRC_CONSUMER_GROUP_STAT;
    
    -- 查看会话属于哪个消费者组
    SELECT SID, SERIAL#, USERNAME, RESOURCE_CONSUMER_GROUP
    FROM V$SESSION;
    
I/O校准相关
  • 争用场景:在校准期间,由于会产生巨大的I/O压力,会与生产业务争用I/O资源,导致业务会话出现I/O相关的等待事件,如db file sequential read, db file scattered read
  • 排查与解决
    • 务必在维护窗口执行校准。
    • 校准前检查异步I/O是否启用:
      SHOW PARAMETER FILESYSTEMIO_OPTIONS;
      -- 如果输出是 'none',需要设置为 'setall' 并重启实例(可能需OS支持)
      
    • 查看校准历史和状态:
      SELECT * FROM V$IO_CALIBRATION_STATUS;
      -- STATUS 应为 'READY' 或 'IN PROGRESS'
      
      SELECT * FROM DBA_RSRC_IO_CALIBRATE;
      -- 查看历史的校准结果
      
  • 如果校准失败,通常原因有:未使用异步I/O、数据文件存放在不同性能的存储上、或系统I/O负载过重。

总结

官方总结

  • 资源管理器是Oracle实例内部的精细化资源调度系统,通过消费者组、计划和指令三级结构,以基于优先级的轮询调度算法,实现对CPU和并行度等资源的分配与限制,确保关键业务的服务质量(QoS)。
  • I/O校准是一个通过生成可控的、渐进的I/O负载来量化存储子系统最大IOPS和MBPS性能的诊断工具。其结果为数据库优化器和容量规划提供关键的硬件性能数据输入。

通俗总结

  • 资源管理器是数据库世界的**“交通警察”**。它不关心路(硬件)有多宽,只负责制定规则,确保在车多的时候,救护车、公交车和小轿车能有序通行,防止某些车辆霸占道路。
  • I/O校准是数据库世界的**“道路检测车”。它专门负责测量这条路(存储)的最高车速(IOPS)** 和最大货运输送能力(MBPS),并给出精确的报告。

DBA的职责就是:

  1. 先用 “道路检测车”(I/O校准) 测出存储的性能极限。
  2. 然后根据业务需求,让 “交通警察”(资源管理器) 依据这份报告来制定最合理的交通规则(资源计划)。
  3. 最终,让整个数据库系统既能在硬件极限内安全运行,又能确保最重要的业务永远一路畅通。

两者相辅相成,共同构成了Oracle数据库资源管理与性能优化的坚实基石。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值