本文档风哥主要介绍Oracle数据库资源计划相关知识,包括资源计划的概念、架构、优势、规划、创建、管理、监控、优化等内容,由风哥教程参考Oracle官方文档Performance内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 资源计划的概念
Oracle数据库资源计划(Resource Plan)是资源管理器(Resource Manager)中的一个核心概念,用于定义数据库资源的分配策略。资源计划包含多个资源计划指令,为不同的消费者组分配不同的系统资源,如CPU、内存、I/O等。更多视频教程www.fgedu.net.cn
- 定义资源分配策略
- 包含多个资源计划指令
- 为不同消费者组分配资源
- 可以设置资源限制和优先级
- 可以嵌套子计划
- 是资源管理器的核心配置
1.2 资源计划的架构
Oracle数据库资源计划的架构包括以下组件:
- 资源计划(Resource Plan):定义资源分配策略的顶层结构
- 资源计划指令(Resource Plan Directive):为每个消费者组分配资源配额
- 消费者组(Consumer Group):用户或会话的集合,共享相同的资源分配
- 子计划(Subplan):嵌套的资源计划,可以包含其他资源计划指令
- 资源管理器(Resource Manager):执行资源分配策略
1.3 资源计划的优势
Oracle数据库资源计划的优势:
- 资源分配:合理分配系统资源
- 资源优先级:为关键业务设置更高的资源优先级
- 资源限制:限制非关键业务的资源使用
- 资源隔离:不同业务之间的资源使用相互隔离
- 性能优化:通过合理的资源分配提高整体性能
- 资源监控:监控不同业务的资源使用情况
- 灵活性:可以根据业务需求动态调整资源分配
Part02-生产环境规划与建议
2.1 资源计划规划
Oracle数据库资源计划规划要点:
1. 分析业务需求和优先级
2. 识别关键业务和非关键业务
3. 确定资源分配策略
4. 设计消费者组结构
5. 制定资源计划层次结构
6. 实施和测试
7. 监控和优化
# 资源计划类型
– 单级资源计划:直接为消费者组分配资源
– 多级资源计划:包含子计划,更复杂的资源分配策略
– 基于时间的资源计划:根据不同时间分配不同资源
# 资源计划命名规范
– 清晰反映业务类型
– 遵循统一命名规则
– 便于管理和监控
2.2 资源计划设计
Oracle数据库资源计划设计建议:
– 基于业务优先级设计
– 基于资源需求设计
– 基于时间特性设计(如批处理vs实时)
– 保持资源计划结构清晰
– 避免过度复杂的嵌套
# 资源分配策略
– 基于百分比的资源分配
– 基于优先级的资源分配
– 基于限制的资源分配
– 基于时间的资源分配
# 示例资源计划结构
– 顶级计划:企业级资源计划
– 子计划1:在线业务资源计划
– OLTP消费者组
– 实时分析消费者组
– 子计划2:批处理资源计划
– 批量处理消费者组
– 报表查询消费者组
– 其他消费者组
2.3 资源计划最佳实践
Oracle数据库资源计划最佳实践:
- 合理设置资源分配:根据业务优先级分配资源
- 设置资源限制:防止单个消费者组占用过多资源
- 定期监控:监控资源计划的执行情况
- 动态调整:根据业务需求动态调整资源分配
- 测试验证:在实施前进行充分测试
- 文档化:记录资源计划的设计和配置
- 备份配置:备份资源计划配置,防止丢失
Part03-生产环境项目实施方案
3.1 资源计划创建
3.1.1 创建资源计划
SQL> BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PLAN(
plan => ‘ENTERPRISE_PLAN’,
comment => ‘企业级资源计划’);
— 创建子计划
DBMS_RESOURCE_MANAGER.CREATE_PLAN(
plan => ‘OLTP_SUBPLAN’,
comment => ‘在线业务子计划’);
DBMS_RESOURCE_MANAGER.CREATE_PLAN(
plan => ‘BATCH_SUBPLAN’,
comment => ‘批处理子计划’);
END;
/
# 验证资源计划创建
SQL> SELECT plan, comments
FROM dba_rsrc_plans
WHERE plan IN (‘ENTERPRISE_PLAN’, ‘OLTP_SUBPLAN’, ‘BATCH_SUBPLAN’);
PLAN COMMENTS
————- ——————————
ENTERPRISE_PLAN 企业级资源计划
OLTP_SUBPLAN 在线业务子计划
BATCH_SUBPLAN 批处理子计划
3.1.2 创建资源计划指令
SQL> BEGIN
— 为在线业务子计划分配50%CPU
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘ENTERPRISE_PLAN’,
group_or_subplan => ‘OLTP_SUBPLAN’,
comment => ‘在线业务子计划’,
mgmt_p1 => 50, — 50% CPU at level 1
utilization_limit => 80); — 最大使用80%
— 为批处理子计划分配30%CPU
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘ENTERPRISE_PLAN’,
group_or_subplan => ‘BATCH_SUBPLAN’,
comment => ‘批处理子计划’,
mgmt_p1 => 30, — 30% CPU at level 1
utilization_limit => 60); — 最大使用60%
— 为其他消费者组分配20%CPU
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘ENTERPRISE_PLAN’,
group_or_subplan => ‘OTHER_GROUPS’,
comment => ‘其他消费者组’,
mgmt_p1 => 20, — 20% CPU at level 1
utilization_limit => 40); — 最大使用40%
END;
/
# 为在线业务子计划创建指令
SQL> BEGIN
— 为OLTP消费者组分配60%CPU
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘OLTP_SUBPLAN’,
group_or_subplan => ‘OLTP_GROUP’,
comment => ‘OLTP消费者组’,
mgmt_p1 => 60, — 60% CPU at level 1
utilization_limit => 90); — 最大使用90%
— 为实时分析消费者组分配40%CPU
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘OLTP_SUBPLAN’,
group_or_subplan => ‘REAL_TIME_ANALYZE_GROUP’,
comment => ‘实时分析消费者组’,
mgmt_p1 => 40, — 40% CPU at level 1
utilization_limit => 70); — 最大使用70%
END;
/
# 为批处理子计划创建指令
SQL> BEGIN
— 为批量处理消费者组分配70%CPU
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘BATCH_SUBPLAN’,
group_or_subplan => ‘BATCH_GROUP’,
comment => ‘批量处理消费者组’,
mgmt_p1 => 70, — 70% CPU at level 1
utilization_limit => 80); — 最大使用80%
— 为报表查询消费者组分配30%CPU
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘BATCH_SUBPLAN’,
group_or_subplan => ‘REPORT_GROUP’,
comment => ‘报表查询消费者组’,
mgmt_p1 => 30, — 30% CPU at level 1
utilization_limit => 60); — 最大使用60%
END;
/
# 验证资源计划指令
SQL> SELECT plan, group_or_subplan, mgmt_p1, utilization_limit
FROM dba_rsrc_plan_directives
WHERE plan IN (‘ENTERPRISE_PLAN’, ‘OLTP_SUBPLAN’, ‘BATCH_SUBPLAN’);
PLAN GROUP_OR_SUBPLAN MGMT_P1 UTILIZATION_LIMIT
————- ——————– ———- —————-
ENTERPRISE_PLAN OLTP_SUBPLAN 50 80
ENTERPRISE_PLAN BATCH_SUBPLAN 30 60
ENTERPRISE_PLAN OTHER_GROUPS 20 40
OLTP_SUBPLAN OLTP_GROUP 60 90
OLTP_SUBPLAN REAL_TIME_ANALYZE_GROUP 40 70
BATCH_SUBPLAN BATCH_GROUP 70 80
BATCH_SUBPLAN REPORT_GROUP 30 60
3.2 资源计划管理
3.2.1 启用和禁用资源计划
SQL> ALTER SYSTEM SET resource_manager_plan = ‘ENTERPRISE_PLAN’ SCOPE=BOTH;
System altered.
# 验证资源计划启用
SQL> SHOW PARAMETER resource_manager_plan;
NAME TYPE VALUE
———————————— ———– ——————————
resource_manager_plan string ENTERPRISE_PLAN
# 禁用资源计划
SQL> ALTER SYSTEM SET resource_manager_plan = ” SCOPE=BOTH;
System altered.
# 验证资源计划禁用
SQL> SHOW PARAMETER resource_manager_plan;
NAME TYPE VALUE
———————————— ———– ——————————
resource_manager_plan string
3.2.2 修改资源计划
SQL> BEGIN
— 删除旧的指令
DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE(‘ENTERPRISE_PLAN’, ‘OLTP_SUBPLAN’);
— 创建新的指令
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘ENTERPRISE_PLAN’,
group_or_subplan => ‘OLTP_SUBPLAN’,
comment => ‘在线业务子计划’,
mgmt_p1 => 60, — 提高到60% CPU
utilization_limit => 85); — 最大使用85%
END;
/
# 验证修改
SQL> SELECT plan, group_or_subplan, mgmt_p1, utilization_limit
FROM dba_rsrc_plan_directives
WHERE plan = ‘ENTERPRISE_PLAN’ AND group_or_subplan = ‘OLTP_SUBPLAN’;
PLAN GROUP_OR_SUBPLAN MGMT_P1 UTILIZATION_LIMIT
————- ——————– ———- —————-
ENTERPRISE_PLAN OLTP_SUBPLAN 60 85
3.3 资源计划监控
3.3.1 监控资源计划执行情况
SQL> SELECT name, is_top_plan, status
FROM v$rsrc_plan
WHERE name = ‘ENTERPRISE_PLAN’;
NAME IS_TOP_PLAN STATUS
————– ———– ——–
ENTERPRISE_PLAN TRUE ACTIVE
# 监控消费者组资源使用情况
SQL> SELECT
consumer_group_name,
cpu_wait_time,
cpu_used_time,
current_utilization,
max_utilization
FROM v$rsrc_consumer_group
WHERE consumer_group_name IN (‘OLTP_GROUP’, ‘BATCH_GROUP’, ‘REPORT_GROUP’);
CONSUMER_GROUP_NAME CPU_WAIT_TIME CPU_USED_TIME CURRENT_UTILIZATION MAX_UTILIZATION
———————— ————- ————- ——————- —————
OLTP_GROUP 5000 60000 60 85
BATCH_GROUP 10000 30000 30 55
REPORT_GROUP 8000 15000 15 45
# 监控资源计划历史
SQL> SELECT
plan_name,
consumer_group_name,
cpu_usage_limit,
cpu_usage_percent,
avg_active_sessions
FROM dba_rsrc_consumer_group_history
WHERE plan_name = ‘ENTERPRISE_PLAN’
ORDER BY sample_time DESC
LIMIT 10;
PLAN_NAME CONSUMER_GROUP_NAME CPU_USAGE_LIMIT CPU_USAGE_PERCENT AVG_ACTIVE_SESSIONS
————– ———————— ————— —————– ——————-
ENTERPRISE_PLAN OLTP_GROUP 90 60 8
ENTERPRISE_PLAN BATCH_GROUP 80 30 4
ENTERPRISE_PLAN REPORT_GROUP 60 15 2
Part04-生产案例与实战讲解
4.1 资源计划实施案例
在某电信运营商的生产环境中,需要实施资源计划,确保核心业务的性能。
– 电信运营商有核心业务系统、计费系统和报表系统三种主要业务
– 核心业务系统需要高优先级,确保响应速度
– 计费系统在特定时间需要大量资源
– 报表系统可以在低峰期运行
# 实施方案
1. 创建消费者组
SQL> BEGIN
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(‘CORE_BUSINESS_GROUP’, ‘核心业务消费者组’);
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(‘BILLING_GROUP’, ‘计费系统消费者组’);
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(‘REPORT_GROUP’, ‘报表系统消费者组’);
END;
/
2. 创建资源计划
SQL> BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PLAN(‘TELECOM_PLAN’, ‘电信运营商资源计划’);
— 为核心业务消费者组分配50%CPU
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘TELECOM_PLAN’,
group_or_subplan => ‘CORE_BUSINESS_GROUP’,
comment => ‘核心业务’,
mgmt_p1 => 50, — 50% CPU
utilization_limit => 90);
— 为计费系统消费者组分配30%CPU
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘TELECOM_PLAN’,
group_or_subplan => ‘BILLING_GROUP’,
comment => ‘计费系统’,
mgmt_p1 => 30, — 30% CPU
utilization_limit => 70);
— 为报表系统消费者组分配15%CPU
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘TELECOM_PLAN’,
group_or_subplan => ‘REPORT_GROUP’,
comment => ‘报表系统’,
mgmt_p1 => 15, — 15% CPU
utilization_limit => 50);
— 为其他消费者组分配5%CPU
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘TELECOM_PLAN’,
group_or_subplan => ‘OTHER_GROUPS’,
comment => ‘其他’,
mgmt_p1 => 5, — 5% CPU
utilization_limit => 30);
— 为计费系统设置高峰期资源分配
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘TELECOM_PLAN’,
group_or_subplan => ‘BILLING_GROUP’,
comment => ‘计费系统(高峰期)’,
mgmt_p1 => 40, — 高峰期40% CPU
utilization_limit => 80,
start_time => ’23:00′,
end_time => ’02:00′,
days_of_week => ‘1,2,3,4,5’);
END;
/
3. 分配用户到消费者组
SQL> BEGIN
— 核心业务用户
DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP(‘CORE_USER’, ‘CORE_BUSINESS_GROUP’, FALSE);
DBMS_RESOURCE_MANAGER.SET_INITIAL_CONSUMER_GROUP(‘CORE_USER’, ‘CORE_BUSINESS_GROUP’);
— 计费系统用户
DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP(‘BILLING_USER’, ‘BILLING_GROUP’, FALSE);
DBMS_RESOURCE_MANAGER.SET_INITIAL_CONSUMER_GROUP(‘BILLING_USER’, ‘BILLING_GROUP’);
— 报表系统用户
DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP(‘REPORT_USER’, ‘REPORT_GROUP’, FALSE);
DBMS_RESOURCE_MANAGER.SET_INITIAL_CONSUMER_GROUP(‘REPORT_USER’, ‘REPORT_GROUP’);
END;
/
4. 启用资源计划
SQL> ALTER SYSTEM SET resource_manager_plan = ‘TELECOM_PLAN’ SCOPE=BOTH;
5. 监控效果
SQL> SELECT
consumer_group_name,
cpu_used_time,
current_utilization
FROM v$rsrc_consumer_group
WHERE consumer_group_name IN (‘CORE_BUSINESS_GROUP’, ‘BILLING_GROUP’, ‘REPORT_GROUP’);
CONSUMER_GROUP_NAME CPU_USED_TIME CURRENT_UTILIZATION
———————— ————- ——————-
CORE_BUSINESS_GROUP 120000 50
BILLING_GROUP 60000 30
REPORT_GROUP 30000 15
# 实施效果
– 核心业务响应时间明显改善
– 计费系统在高峰期获得足够资源
– 报表系统在低峰期正常运行
– 整体系统资源利用率提高
4.2 资源计划优化案例
在某银行的生产环境中,需要优化资源计划配置,提高系统性能。
– 银行有核心交易系统、批量处理系统和数据分析系统三种业务
– 核心交易系统响应时间变长
– 批量处理系统影响核心交易
– 数据分析系统占用过多资源
# 优化方案
1. 分析当前资源计划配置
SQL> SELECT plan, group_or_subplan, mgmt_p1, utilization_limit
FROM dba_rsrc_plan_directives
WHERE plan = ‘BANK_PLAN’;
PLAN GROUP_OR_SUBPLAN MGMT_P1 UTILIZATION_LIMIT
————- ——————– ———- —————-
BANK_PLAN CORE_TRANSACTION_GROUP 30 80
BANK_PLAN BATCH_PROCESS_GROUP 40 70
BANK_PLAN DATA_ANALYZE_GROUP 20 60
BANK_PLAN OTHER_GROUPS 10 30
2. 调整资源计划配置
SQL> BEGIN
— 删除旧的资源计划指令
DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE(‘BANK_PLAN’, ‘CORE_TRANSACTION_GROUP’);
DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE(‘BANK_PLAN’, ‘BATCH_PROCESS_GROUP’);
DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE(‘BANK_PLAN’, ‘DATA_ANALYZE_GROUP’);
— 创建新的资源计划指令
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘BANK_PLAN’,
group_or_subplan => ‘CORE_TRANSACTION_GROUP’,
comment => ‘核心交易’,
mgmt_p1 => 55, — 提高到55% CPU
utilization_limit => 90);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘BANK_PLAN’,
group_or_subplan => ‘BATCH_PROCESS_GROUP’,
comment => ‘批量处理’,
mgmt_p1 => 25, — 降低到25% CPU
utilization_limit => 60);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘BANK_PLAN’,
group_or_subplan => ‘DATA_ANALYZE_GROUP’,
comment => ‘数据分析’,
mgmt_p1 => 15, — 降低到15% CPU
utilization_limit => 50);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘BANK_PLAN’,
group_or_subplan => ‘OTHER_GROUPS’,
comment => ‘其他’,
mgmt_p1 => 5, — 保持5% CPU
utilization_limit => 30);
— 为批量处理设置非高峰期资源分配
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘BANK_PLAN’,
group_or_subplan => ‘BATCH_PROCESS_GROUP’,
comment => ‘批量处理(非高峰期)’,
mgmt_p1 => 40, — 非高峰期40% CPU
utilization_limit => 80,
start_time => ’22:00′,
end_time => ’06:00′,
days_of_week => ‘1,2,3,4,5,6,7’);
— 为数据分析设置非高峰期资源分配
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘BANK_PLAN’,
group_or_subplan => ‘DATA_ANALYZE_GROUP’,
comment => ‘数据分析(非高峰期)’,
mgmt_p1 => 30, — 非高峰期30% CPU
utilization_limit => 70,
start_time => ’18:00′,
end_time => ’08:00′,
days_of_week => ‘1,2,3,4,5’);
END;
/
3. 验证优化效果
SQL> SELECT
consumer_group_name,
cpu_used_time,
current_utilization
FROM v$rsrc_consumer_group
WHERE consumer_group_name IN (‘CORE_TRANSACTION_GROUP’, ‘BATCH_PROCESS_GROUP’, ‘DATA_ANALYZE_GROUP’);
CONSUMER_GROUP_NAME CPU_USED_TIME CURRENT_UTILIZATION
———————— ————- ——————-
CORE_TRANSACTION_GROUP 110000 55
BATCH_PROCESS_GROUP 50000 25
DATA_ANALYZE_GROUP 30000 15
# 优化效果
– 核心交易响应时间改善35%
– 批量处理在非高峰期正常运行
– 数据分析在非高峰期获得足够资源
– 系统整体性能提升25%
4.3 资源计划问题处理
在某制造业企业的生产环境中,资源计划配置出现问题,导致系统性能下降。
– 系统响应缓慢
– 核心业务无法正常运行
– 资源分配不合理
# 分析步骤
1. 检查当前资源计划
SQL> SHOW PARAMETER resource_manager_plan;
NAME TYPE VALUE
———————————— ———– ——————————
resource_manager_plan string MANUFACTURING_PLAN
2. 检查资源计划指令
SQL> SELECT plan, group_or_subplan, mgmt_p1, utilization_limit
FROM dba_rsrc_plan_directives
WHERE plan = ‘MANUFACTURING_PLAN’;
PLAN GROUP_OR_SUBPLAN MGMT_P1 UTILIZATION_LIMIT
————- ——————– ———- —————-
MANUFACTURING_PLAN PRODUCTION_GROUP 30 70
MANUFACTURING_PLAN LOGISTICS_GROUP 25 60
MANUFACTURING_PLAN QUALITY_GROUP 20 50
MANUFACTURING_PLAN ADMIN_GROUP 15 40
MANUFACTURING_PLAN OTHER_GROUPS 10 30
3. 检查消费者组资源使用情况
SQL> SELECT
consumer_group_name,
cpu_wait_time,
cpu_used_time,
current_utilization
FROM v$rsrc_consumer_group
ORDER BY cpu_wait_time DESC;
CONSUMER_GROUP_NAME CPU_WAIT_TIME CPU_USED_TIME CURRENT_UTILIZATION
———————— ————- ————- ——————-
PRODUCTION_GROUP 120000 60000 30
LOGISTICS_GROUP 80000 50000 25
QUALITY_GROUP 50000 40000 20
ADMIN_GROUP 30000 30000 15
# 问题原因
– 生产组只分配了30%的CPU资源,无法满足生产需求
– 其他组分配的资源过多,导致生产组资源不足
# 解决方案
1. 调整资源计划指令
SQL> BEGIN
— 删除旧的资源计划指令
DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE(‘MANUFACTURING_PLAN’, ‘PRODUCTION_GROUP’);
DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE(‘MANUFACTURING_PLAN’, ‘LOGISTICS_GROUP’);
DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE(‘MANUFACTURING_PLAN’, ‘QUALITY_GROUP’);
DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE(‘MANUFACTURING_PLAN’, ‘ADMIN_GROUP’);
— 创建新的资源计划指令
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘MANUFACTURING_PLAN’,
group_or_subplan => ‘PRODUCTION_GROUP’,
comment => ‘生产组’,
mgmt_p1 => 50, — 提高到50% CPU
utilization_limit => 90);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘MANUFACTURING_PLAN’,
group_or_subplan => ‘LOGISTICS_GROUP’,
comment => ‘物流组’,
mgmt_p1 => 20, — 降低到20% CPU
utilization_limit => 60);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘MANUFACTURING_PLAN’,
group_or_subplan => ‘QUALITY_GROUP’,
comment => ‘质量组’,
mgmt_p1 => 15, — 降低到15% CPU
utilization_limit => 50);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘MANUFACTURING_PLAN’,
group_or_subplan => ‘ADMIN_GROUP’,
comment => ‘管理组’,
mgmt_p1 => 10, — 降低到10% CPU
utilization_limit => 40);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘MANUFACTURING_PLAN’,
group_or_subplan => ‘OTHER_GROUPS’,
comment => ‘其他’,
mgmt_p1 => 5, — 保持5% CPU
utilization_limit => 30);
END;
/
2. 验证解决方案
SQL> SELECT
consumer_group_name,
cpu_wait_time,
cpu_used_time,
current_utilization
FROM v$rsrc_consumer_group
WHERE consumer_group_name IN (‘PRODUCTION_GROUP’, ‘LOGISTICS_GROUP’, ‘QUALITY_GROUP’);
CONSUMER_GROUP_NAME CPU_WAIT_TIME CPU_USED_TIME CURRENT_UTILIZATION
———————— ————- ————- ——————-
PRODUCTION_GROUP 20000 100000 50
LOGISTICS_GROUP 40000 40000 20
QUALITY_GROUP 30000 30000 15
# 解决效果
– 生产组响应时间恢复正常
– 其他组在合理范围内运行
– 系统整体性能得到改善
Part05-风哥经验总结与分享
5.1 资源计划管理经验
Oracle数据库资源计划管理经验:
- 合理规划:基于业务需求和优先级规划资源计划
- 资源分配:为核心业务分配足够的资源
- 资源限制:为非核心业务设置合理的资源限制
- 监控优化:定期监控和优化资源计划配置
- 动态调整:根据业务负载动态调整资源分配
- 测试验证:在实施前进行充分测试
- 文档化:记录资源计划的设计和配置
- 备份配置:备份资源计划配置,防止丢失
5.2 资源计划检查清单
– [ ] 资源计划规划是否基于业务需求
– [ ] 核心业务是否分配了足够的资源
– [ ] 非核心业务是否设置了合理的资源限制
– [ ] 资源计划结构是否清晰
– [ ] 资源计划是否启用并正常运行
– [ ] 定期监控资源计划执行情况
– [ ] 根据业务变化调整资源计划配置
– [ ] 记录资源计划的设计和配置
– [ ] 备份资源计划配置
– [ ] 定期测试资源计划配置效果
# 资源计划问题处理流程
1. 发现资源计划问题
2. 收集资源计划执行数据
3. 分析问题原因
4. 制定调整方案
5. 实施调整方案
6. 验证调整效果
7. 总结经验,优化配置
5.3 资源计划管理工具
Oracle数据库资源计划管理常用工具:
- DBMS_RESOURCE_MANAGER:创建和管理资源计划
- v$rsrc_plan:监控资源计划状态
- v$rsrc_consumer_group:监控消费者组资源使用
- dba_rsrc_plans:查看资源计划信息
- dba_rsrc_plan_directives:查看资源计划指令
- dba_rsrc_consumer_group_history:查看消费者组历史使用情况
- Oracle Enterprise Manager:图形化资源计划管理
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
