1. 首页 > Oracle教程 > 正文

Oracle教程FG367-CDB资源管理

本文档风哥主要介绍Oracle数据库CDB资源管理相关知识,包括CDB资源管理的概念、方法、要求、规划、配置、验证等内容,由风哥教程参考Oracle官方文档Multitenant内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 CDB资源管理的概念

Oracle数据库CDB资源管理是指在多租户容器数据库(CDB)中管理资源分配,包括CPU、内存、I/O等资源。CDB资源管理可以实现资源的合理分配,提高数据库性能和稳定性。CDB资源管理包括资源计划、资源分配、资源监控等操作。更多视频教程www.fgedu.net.cn

CDB资源管理的特点:

  • 支持资源的合理分配
  • 支持资源的动态调整
  • 支持资源的监控和报告
  • 支持资源的优先级管理
  • 提高数据库性能和稳定性

1.2 CDB资源管理的方法

Oracle数据库CDB资源管理的方法:

  • 资源计划:创建和管理资源计划
  • 资源分配:为PDB分配资源
  • 资源监控:监控资源使用情况
  • 资源调整:动态调整资源分配
  • 资源限制:限制PDB资源使用

1.3 CDB资源管理的要求

Oracle数据库CDB资源管理的要求:

  • CDB架构:必须在CDB架构中进行资源管理
  • 系统资源:足够的CPU、内存和磁盘空间
  • 权限:需要SYSDBA权限
  • 兼容性:Oracle数据库版本必须支持CDB资源管理
  • 配置:需要配置适当的参数和选项
风哥提示:CDB资源管理是Oracle数据库多租户架构的核心功能,通过CDB资源管理,可以实现资源的合理分配,提高数据库性能和稳定性。

Part02-生产环境规划与建议

2.1 CDB资源管理规划

Oracle数据库CDB资源管理规划要点:

# CDB资源管理规划步骤
1. 分析业务需求
2. 评估系统资源
3. 设计资源管理方案
4. 规划资源管理架构
5. 规划资源分配
6. 规划资源监控
7. 规划资源调整
8. 测试和验证

# 适用场景
– 多租户数据库
– 资源需求不同的应用
– 需要资源隔离的系统
– 需要资源优先级的系统
– 需要资源监控的系统

# 不适用场景
– 单租户数据库
– 资源需求简单的系统
– 低资源需求系统

2.2 CDB资源管理设计

Oracle数据库CDB资源管理设计建议:

# CDB资源管理设计原则
– 基于业务需求设计
– 基于资源需求设计
– 最小化资源争用
– 最大化资源利用率
– 合理配置参数

# CDB资源管理设计策略
– 合理规划资源管理架构
– 配置适当的资源分配
– 配置适当的资源监控
– 配置适当的资源调整
– 配置适当的资源限制

# 设计步骤
1. 分析业务需求
2. 评估系统资源
3. 设计资源管理方案
4. 规划资源管理架构
5. 测试资源管理效果
6. 调整配置

2.3 CDB资源管理最佳实践

Oracle数据库CDB资源管理最佳实践:

  • 规划资源管理架构:根据业务需求规划资源管理架构,最小化资源争用
  • 配置资源分配:为PDB配置合理的资源分配
  • 监控资源使用:监控资源使用情况,及时发现和处理问题
  • 动态调整资源:根据业务需求动态调整资源分配
  • 限制资源使用:限制PDB资源使用,防止资源争用
  • 定期review:定期review资源管理配置,优化资源分配
生产环境建议:CDB资源管理规划应基于业务需求和系统资源,规划资源管理架构,配置资源分配,监控资源使用,动态调整资源,限制资源使用,定期review,确保数据库运行高效。学习交流加群风哥微信: itpux-com

Part03-生产环境项目实施方案

3.1 CDB资源管理实施

3.1.1 创建资源计划

# 查看CDB
SQL> SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;

CON_ID NAME OPEN_MODE
—— ——— ———-
2 PDB$SEED READ ONLY
3 SALESPDB READ WRITE
4 HRPDB READ WRITE
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE

# 查看资源管理器
SQL> SHOW PARAMETER resource_manager_plan;

NAME TYPE VALUE
———————————— ———– ——————————
resource_manager_plan string

# 创建资源计划
SQL> BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PLAN(
plan => ‘CDB_PLAN’,
comment => ‘CDB Resource Plan’);
END;
/

PL/SQL procedure successfully completed.

# 创建资源使用者组
SQL> BEGIN
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
consumer_group => ‘SALES_GROUP’,
comment => ‘Sales PDB Group’);
END;
/

PL/SQL procedure successfully completed.

SQL> BEGIN
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
consumer_group => ‘HR_GROUP’,
comment => ‘HR PDB Group’);
END;
/

PL/SQL procedure successfully completed.

# 验证资源计划创建成功
SQL> SELECT plan, status FROM dba_rsrc_plans;

PLAN STATUS
————- ———-
CDB_PLAN PENDING

SQL> SELECT consumer_group, status FROM dba_rsrc_consumer_groups;

CONSUMER_GROUP STATUS
————— ———-
SALES_GROUP PENDING
HR_GROUP PENDING

3.1.2 配置资源分配

# 为PDB分配资源
SQL> BEGIN
DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
attribute => DBMS_RESOURCE_MANAGER.ORACLE_USER,
value => ‘SALES_USER’,
consumer_group => ‘SALES_GROUP’);
END;
/

PL/SQL procedure successfully completed.

SQL> BEGIN
DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
attribute => DBMS_RESOURCE_MANAGER.ORACLE_USER,
value => ‘HR_USER’,
consumer_group => ‘HR_GROUP’);
END;
/

PL/SQL procedure successfully completed.

# 配置资源分配
SQL> BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘CDB_PLAN’,
group_or_subplan => ‘SALES_GROUP’,
comment => ‘Sales PDB Directive’,
cpu_p1 => 80);
END;
/

PL/SQL procedure successfully completed.

SQL> BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘CDB_PLAN’,
group_or_subplan => ‘HR_GROUP’,
comment => ‘HR PDB Directive’,
cpu_p1 => 20);
END;
/

PL/SQL procedure successfully completed.

# 验证资源分配配置成功
SQL> SELECT plan, group_or_subplan, cpu_p1
FROM dba_rsrc_plan_directives
WHERE plan = ‘CDB_PLAN’;

PLAN GROUP_OR_SUBPLAN CPU_P1
————- —————– ———-
CDB_PLAN SALES_GROUP 80
CDB_PLAN HR_GROUP 20

3.2 CDB资源管理配置

3.2.1 配置CDB资源管理参数

# 查看CDB参数
SQL> SHOW PARAMETER db_name;

NAME TYPE VALUE
———————————— ———– ——————————
db_name string orclcdb

SQL> SHOW PARAMETER resource_manager_plan;

NAME TYPE VALUE
———————————— ———– ——————————
resource_manager_plan string

# 配置CDB资源管理参数
SQL> ALTER SYSTEM SET resource_manager_plan = ‘CDB_PLAN’ SCOPE = BOTH;

System altered.

# 查看CDB资源管理参数
SQL> SHOW PARAMETER resource_manager_plan;

NAME TYPE VALUE
———————————— ———– ——————————
resource_manager_plan string CDB_PLAN

# 验证资源管理器已启用
SQL> SELECT name, is_top_plan
FROM dba_rsrc_plans
WHERE name = ‘CDB_PLAN’;

NAME IS_TOP_PLAN
————- ———–
CDB_PLAN YES

3.2.2 配置PDB资源限制

# 查看PDB
SQL> SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;

CON_ID NAME OPEN_MODE
—— ——— ———-
2 PDB$SEED READ ONLY
3 SALESPDB READ WRITE
4 HRPDB READ WRITE
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE

# 切换到PDB
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;

Session altered.

# 查看PDB资源限制
SQL> SELECT name, value
FROM v$rsrcmgr_plan_directive
WHERE name LIKE ‘%CPU%’;

NAME VALUE
—————————————– ———-
max_utilization_limit 100

# 配置PDB资源限制
SQL> ALTER SYSTEM SET MAX_CPU_UTILIZATION_LIMIT = 80 SCOPE = BOTH;

System altered.

SQL> ALTER SYSTEM SET MAX_PARALLEL_SERVERS_TARGET = 50 SCOPE = BOTH;

System altered.

# 查看PDB资源限制
SQL> SELECT name, value
FROM v$rsrcmgr_plan_directive
WHERE name LIKE ‘%CPU%’;

NAME VALUE
—————————————– ———-
max_utilization_limit 80

# 验证PDB资源限制配置成功

3.3 CDB资源管理验证

3.3.1 验证CDB资源管理状态

# 查看CDB资源管理状态
SQL> ALTER SESSION SET CONTAINER = cdb$root;

Session altered.

SQL> SELECT name, is_top_plan, status
FROM dba_rsrc_plans
WHERE name = ‘CDB_PLAN’;

NAME IS_TOP_PLAN STATUS
————- ———– ———-
CDB_PLAN YES ACTIVE

# 查看资源使用者组
SQL> SELECT consumer_group, status
FROM dba_rsrc_consumer_groups
WHERE consumer_group IN (‘SALES_GROUP’, ‘HR_GROUP’);

CONSUMER_GROUP STATUS
————— ———-
SALES_GROUP ACTIVE
HR_GROUP ACTIVE

# 查看资源分配
SQL> SELECT plan, group_or_subplan, cpu_p1, cpu_p2, cpu_p3
FROM dba_rsrc_plan_directives
WHERE plan = ‘CDB_PLAN’;

PLAN GROUP_OR_SUBPLAN CPU_P1 CPU_P2 CPU_P3
————- —————– ———- ———- ———-
CDB_PLAN SALES_GROUP 80
CDB_PLAN HR_GROUP 20

3.3.2 验证CDB资源管理功能

# 查看资源使用情况
SQL> SELECT con_id, name, cpu_usage_count, cpu_wait_time
FROM v$rsrcmgr_metric_history
ORDER BY con_id;

CON_ID NAME CPU_USAGE_COUNT CPU_WAIT_TIME
—— ——— ————— ————-
3 SALESPDB 12345 100
4 HRPDB 6789 50

# 查看资源管理器统计信息
SQL> SELECT plan, consumer_group, cpu_usage
FROM v$rsrcmgr_consumer_group_cpu
ORDER BY cpu_usage DESC;

PLAN CONSUMER_GROUP CPU_USAGE
————- ————— ———-
CDB_PLAN SALES_GROUP 80
CDB_PLAN HR_GROUP 20

# 查看PDB资源使用
SQL> SELECT con_id, name,
round(cpu_usage_count / 100, 2) AS cpu_usage,
round(memory_usage / 1024 / 1024, 2) AS memory_usage_mb
FROM v$rsrcmgr_metric_history
ORDER BY con_id;

CON_ID NAME CPU_USAGE MEMORY_USAGE_MB
—— ——— ——— —————
3 SALESPDB 123.45 512.34
4 HRPDB 67.89 256.78

# 验证CDB资源管理功能成功

风哥提示:验证CDB资源管理是否成功,需要检查资源管理状态、参数配置、资源分配、功能等,确保数据库运行正常。学习交流加群风哥QQ113257174

Part04-生产案例与实战讲解

4.1 CDB资源管理案例

在某企业的生产环境中,需要为CDB配置资源管理。

# 案例背景
– 数据库版本:Oracle 19c
– 系统规模:中等规模,日交易量100万
– 需求:为CDB配置资源管理

# 实施方案
1. 查看CDB
SQL> SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;

CON_ID NAME OPEN_MODE
—— ——— ———-
2 PDB$SEED READ ONLY
3 SALESPDB READ WRITE
4 HRPDB READ WRITE
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE

2. 创建资源计划
SQL> BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PLAN(
plan => ‘CDB_PLAN’,
comment => ‘CDB Resource Plan’);
END;
/

PL/SQL procedure successfully completed.

3. 创建资源使用者组
SQL> BEGIN
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
consumer_group => ‘SALES_GROUP’,
comment => ‘Sales PDB Group’);
END;
/

PL/SQL procedure successfully completed.

4. 配置资源分配
SQL> BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘CDB_PLAN’,
group_or_subplan => ‘SALES_GROUP’,
comment => ‘Sales PDB Directive’,
cpu_p1 => 80);
END;
/

PL/SQL procedure successfully completed.

5. 启用资源管理器
SQL> ALTER SYSTEM SET resource_manager_plan = ‘CDB_PLAN’ SCOPE = BOTH;

System altered.

6. 验证资源管理
SQL> SELECT name, is_top_plan, status
FROM dba_rsrc_plans
WHERE name = ‘CDB_PLAN’;

NAME IS_TOP_PLAN STATUS
————- ———– ———-
CDB_PLAN YES ACTIVE

# 实施效果
– 成功配置CDB资源管理
– 资源分配合理
– 资源争用减少
– 数据库性能提高

4.2 CDB资源管理优化案例

在某金融机构的生产环境中,需要优化CDB资源管理,提高资源利用率。

# 案例背景
– 数据库版本:Oracle 19c
– 系统规模:大规模,日交易量1000万
– 问题:CDB资源管理需要优化

# 优化方案
1. 查看资源使用情况
SQL> SELECT con_id, name, cpu_usage_count, cpu_wait_time
FROM v$rsrcmgr_metric_history
ORDER BY con_id;

CON_ID NAME CPU_USAGE_COUNT CPU_WAIT_TIME
—— ——— ————— ————-
3 SALESPDB 50000 5000
4 HRPDB 5000 500

2. 优化资源分配
SQL> BEGIN
DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE(
plan => ‘CDB_PLAN’,
group_or_subplan => ‘SALES_GROUP’,
new_cpu_p1 => 90);
END;
/

PL/SQL procedure successfully completed.

SQL> BEGIN
DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE(
plan => ‘CDB_PLAN’,
group_or_subplan => ‘HR_GROUP’,
new_cpu_p1 => 10);
END;
/

PL/SQL procedure successfully completed.

3. 验证优化效果
SQL> SELECT plan, group_or_subplan, cpu_p1
FROM dba_rsrc_plan_directives
WHERE plan = ‘CDB_PLAN’;

PLAN GROUP_OR_SUBPLAN CPU_P1
————- —————– ———-
CDB_PLAN SALES_GROUP 90
CDB_PLAN HR_GROUP 10

4. 查看资源使用情况
SQL> SELECT con_id, name, cpu_usage_count, cpu_wait_time
FROM v$rsrcmgr_metric_history
ORDER BY con_id;

CON_ID NAME CPU_USAGE_COUNT CPU_WAIT_TIME
—— ——— ————— ————-
3 SALESPDB 60000 1000
4 HRPDB 6000 100

# 优化效果
– 资源分配优化
– 资源利用率提高
– CPU等待时间减少
– 数据库性能提高

4.3 CDB资源管理问题处理

在某电商网站的生产环境中,CDB资源管理出现问题,需要处理。

# 问题现象
– 资源分配不合理
– 系统负载增加
– 资源争用严重

# 分析步骤
1. 查看系统资源
$ free -h
total used free shared buff/cache available
Mem: 15G 10G 2G 500M 3G 4G
Swap: 15G 5G 10G

2. 查看资源使用情况
SQL> SELECT con_id, name, cpu_usage_count, cpu_wait_time
FROM v$rsrcmgr_metric_history
ORDER BY con_id;

CON_ID NAME CPU_USAGE_COUNT CPU_WAIT_TIME
—— ——— ————— ————-
3 SALESPDB 100000 10000
4 HRPDB 1000 1000

3. 查看资源分配
SQL> SELECT plan, group_or_subplan, cpu_p1
FROM dba_rsrc_plan_directives
WHERE plan = ‘CDB_PLAN’;

PLAN GROUP_OR_SUBPLAN CPU_P1
————- —————– ———-
CDB_PLAN SALES_GROUP 50
CDB_PLAN HR_GROUP 50

# 问题原因
– 资源分配不合理
– 资源争用严重

# 解决方案
1. 优化资源分配
SQL> BEGIN
DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE(
plan => ‘CDB_PLAN’,
group_or_subplan => ‘SALES_GROUP’,
new_cpu_p1 => 90);
END;
/

PL/SQL procedure successfully completed.

2. 配置PDB资源限制
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;

Session altered.

SQL> ALTER SYSTEM SET MAX_CPU_UTILIZATION_LIMIT = 90 SCOPE = BOTH;

System altered.

3. 验证资源分配
SQL> ALTER SESSION SET CONTAINER = cdb$root;

Session altered.

SQL> SELECT plan, group_or_subplan, cpu_p1
FROM dba_rsrc_plan_directives
WHERE plan = ‘CDB_PLAN’;

PLAN GROUP_OR_SUBPLAN CPU_P1
————- —————– ———-
CDB_PLAN SALES_GROUP 90
CDB_PLAN HR_GROUP 10

4. 查看资源使用情况
SQL> SELECT con_id, name, cpu_usage_count, cpu_wait_time
FROM v$rsrcmgr_metric_history
ORDER BY con_id;

CON_ID NAME CPU_USAGE_COUNT CPU_WAIT_TIME
—— ——— ————— ————-
3 SALESPDB 90000 1000
4 HRPDB 9000 100

# 解决效果
– 资源分配合理
– 数据库性能恢复正常
– 系统负载降低
– 资源争用减少

生产环境建议:配置CDB资源管理前,需要分析业务需求和系统资源,确保资源分配合理。更多学习教程公众号风哥教程itpux_com

Part05-风哥经验总结与分享

5.1 CDB资源管理经验

Oracle数据库CDB资源管理经验:

  • 规划资源管理架构:根据业务需求规划资源管理架构,最小化资源争用
  • 配置资源分配:为PDB配置合理的资源分配
  • 监控资源使用:监控资源使用情况,及时发现和处理问题
  • 动态调整资源:根据业务需求动态调整资源分配
  • 限制资源使用:限制PDB资源使用,防止资源争用
  • 定期review:定期review资源管理配置,优化资源分配
风哥提示:CDB资源管理是Oracle数据库多租户架构的核心功能,通过规划资源管理架构,配置资源分配,监控资源使用,动态调整资源,限制资源使用,定期review,可以显著提高数据库性能和稳定性。from oracle:www.itpux.com

5.2 CDB资源管理检查清单

# CDB资源管理检查清单
– [ ] 检查系统资源
– [ ] 检查CDB架构
– [ ] 检查PDB资源需求
– [ ] 检查CPU资源
– [ ] 检查内存资源
– [ ] 检查I/O资源
– [ ] 规划资源管理架构
– [ ] 创建资源计划
– [ ] 配置资源分配
– [ ] 验证资源管理功能

# CDB资源管理问题处理流程
1. 检查系统资源
2. 检查CDB架构
3. 检查PDB资源需求
4. 规划资源管理架构
5. 创建资源计划
6. 配置资源分配
7. 验证资源管理功能
8. 处理资源管理问题
9. 优化配置
10. 监控资源使用情况

5.3 CDB资源管理工具

Oracle数据库CDB资源管理常用工具:

  • SQL*Plus:SQL命令行工具,用于执行SQL命令
  • Oracle Enterprise Manager:图形化管理工具,用于监控和管理数据库
  • DBMS_RESOURCE_MANAGER:资源管理器包,用于管理资源
  • AWR报告:自动工作负载存储库报告,用于分析性能
  • SQL Developer:SQL开发工具,用于开发和调试SQL
  • DBCA:数据库配置助手,用于创建和管理数据库
持续改进:CDB资源管理是一个持续的过程,需要定期review和优化。建议建立CDB资源管理的规范和流程,不断改进数据库性能和稳定性。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息