本文档风哥主要介绍Oracle数据库PDB资源限制相关知识,包括PDB资源限制的概念、方法、要求、规划、配置、验证等内容,由风哥教程参考Oracle官方文档Multitenant内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 PDB资源限制的概念
Oracle数据库PDB资源限制是指在多租户容器数据库(CDB)中限制PDB的资源使用,包括CPU、内存、I/O等资源。PDB资源限制可以实现资源的合理分配,防止资源争用,提高数据库性能和稳定性。PDB资源限制包括CPU限制、内存限制、I/O限制等操作。更多视频教程www.fgedu.net.cn
- 支持资源的合理限制
- 支持资源的动态调整
- 支持资源的监控和报告
- 支持资源的优先级管理
- 提高数据库性能和稳定性
1.2 PDB资源限制的方法
Oracle数据库PDB资源限制的方法:
- CPU限制:限制PDB的CPU使用
- 内存限制:限制PDB的内存使用
- I/O限制:限制PDB的I/O使用
- 会话限制:限制PDB的会话数
- 并行限制:限制PDB的并行进程数
1.3 PDB资源限制的要求
Oracle数据库PDB资源限制的要求:
- CDB架构:必须在CDB架构中进行资源限制
- 系统资源:足够的CPU、内存和磁盘空间
- 权限:需要SYSDBA权限
- 兼容性:Oracle数据库版本必须支持PDB资源限制
- 配置:需要配置适当的参数和选项
Part02-生产环境规划与建议
2.1 PDB资源限制规划
Oracle数据库PDB资源限制规划要点:
1. 分析业务需求
2. 评估系统资源
3. 设计资源限制方案
4. 规划资源限制架构
5. 规划资源分配
6. 规划资源监控
7. 规划资源调整
8. 测试和验证
# 适用场景
– 多租户数据库
– 资源需求不同的应用
– 需要资源隔离的系统
– 需要资源优先级的系统
– 需要资源监控的系统
# 不适用场景
– 单租户数据库
– 资源需求简单的系统
– 低资源需求系统
2.2 PDB资源限制设计
Oracle数据库PDB资源限制设计建议:
– 基于业务需求设计
– 基于资源需求设计
– 最小化资源争用
– 最大化资源利用率
– 合理配置参数
# PDB资源限制设计策略
– 合理规划资源限制架构
– 配置适当的资源限制
– 配置适当的资源监控
– 配置适当的资源调整
– 配置适当的资源告警
# 设计步骤
1. 分析业务需求
2. 评估系统资源
3. 设计资源限制方案
4. 规划资源限制架构
5. 测试资源限制效果
6. 调整配置
2.3 PDB资源限制最佳实践
Oracle数据库PDB资源限制最佳实践:
- 规划资源限制架构:根据业务需求规划资源限制架构,最小化资源争用
- 配置资源限制:为PDB配置合理的资源限制
- 监控资源使用:监控资源使用情况,及时发现和处理问题
- 动态调整资源:根据业务需求动态调整资源限制
- 设置资源告警:设置资源告警,及时发现资源争用
- 定期review:定期review资源限制配置,优化资源分配
Part03-生产环境项目实施方案
3.1 PDB资源限制实施
3.1.1 配置CPU限制
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.
# 查看CPU限制参数
SQL> SHOW PARAMETER cpu_count;
NAME TYPE VALUE
———————————— ———– ——————————
cpu_count integer 4
SQL> SHOW PARAMETER max_cpu_utilization_limit;
NAME TYPE VALUE
———————————— ———– ——————————
max_cpu_utilization_limit integer 100
# 配置CPU限制
SQL> ALTER SYSTEM SET MAX_CPU_UTILIZATION_LIMIT = 80 SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET CPU_COUNT = 2 SCOPE = SPFILE;
System altered.
# 查看CPU限制参数
SQL> SHOW PARAMETER max_cpu_utilization_limit;
NAME TYPE VALUE
———————————— ———– ——————————
max_cpu_utilization_limit integer 80
SQL> SHOW PARAMETER cpu_count;
NAME TYPE VALUE
———————————— ———– ——————————
cpu_count integer 4
# 验证CPU限制配置成功
3.1.2 配置内存限制
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看内存限制参数
SQL> SHOW PARAMETER sga_target;
NAME TYPE VALUE
———————————— ———– ——————————
sga_target big integer 0
SQL> SHOW PARAMETER pga_aggregate_target;
NAME TYPE VALUE
———————————— ———– ——————————
pga_aggregate_target big integer 0
SQL> SHOW PARAMETER memory_target;
NAME TYPE VALUE
———————————— ———– ——————————
memory_target big integer 0
# 查看内存使用情况
SQL> SELECT name, value
FROM v$sgainfo
WHERE name = ‘Total SGA Size’;
NAME VALUE
—————————— ———-
Total SGA Size 1073741824
SQL> SELECT name, value
FROM v$pgastat
WHERE name = ‘total PGA memory allocated’;
NAME VALUE
—————————— ———-
total PGA memory allocated 536870912
# 配置内存限制
SQL> ALTER SYSTEM SET MEMORY_TARGET = 1G SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET SGA_TARGET = 800M SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 200M SCOPE = BOTH;
System altered.
# 查看内存限制参数
SQL> SHOW PARAMETER memory_target;
NAME TYPE VALUE
———————————— ———– ——————————
memory_target big integer 1G
SQL> SHOW PARAMETER sga_target;
NAME TYPE VALUE
———————————— ———– ——————————
sga_target big integer 800M
SQL> SHOW PARAMETER pga_aggregate_target;
NAME TYPE VALUE
———————————— ———– ——————————
pga_aggregate_target big integer 200M
# 验证内存限制配置成功
3.2 PDB资源限制配置
3.2.1 配置I/O限制
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看I/O限制参数
SQL> SHOW PARAMETER max_iops;
NAME TYPE VALUE
———————————— ———– ——————————
max_iops integer 0
SQL> SHOW PARAMETER max_mbps;
NAME TYPE VALUE
———————————— ———– ——————————
max_mbps integer 0
# 查看I/O使用情况
SQL> SELECT name, value
FROM v$sysstat
WHERE name IN (‘physical read total IO requests’, ‘physical write total IO requests’);
NAME VALUE
———————————– ———-
physical read total IO requests 123456
physical write total IO requests 67890
# 配置I/O限制
SQL> ALTER SYSTEM SET MAX_IOPS = 10000 SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET MAX_MBPS = 1000 SCOPE = BOTH;
System altered.
# 查看I/O限制参数
SQL> SHOW PARAMETER max_iops;
NAME TYPE VALUE
———————————— ———– ——————————
max_iops integer 10000
SQL> SHOW PARAMETER max_mbps;
NAME TYPE VALUE
———————————— ———– ——————————
max_mbps integer 1000
# 验证I/O限制配置成功
3.2.2 配置会话和并行限制
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看会话限制参数
SQL> SHOW PARAMETER sessions;
NAME TYPE VALUE
———————————— ———– ——————————
sessions integer 172
SQL> SHOW PARAMETER processes;
NAME TYPE VALUE
———————————— ———– ——————————
processes integer 100
# 查看并行限制参数
SQL> SHOW PARAMETER parallel_max_servers;
NAME TYPE VALUE
———————————— ———– ——————————
parallel_max_servers integer 80
SQL> SHOW PARAMETER parallel_servers_target;
NAME TYPE VALUE
———————————— ———– ——————————
parallel_servers_target integer 64
# 查看当前会话数
SQL> SELECT COUNT(*) AS current_sessions FROM v$session;
CURRENT_SESSIONS
—————–
50
# 配置会话和并行限制
SQL> ALTER SYSTEM SET SESSIONS = 150 SCOPE = SPFILE;
System altered.
SQL> ALTER SYSTEM SET PROCESSES = 80 SCOPE = SPFILE;
System altered.
SQL> ALTER SYSTEM SET PARALLEL_MAX_SERVERS = 40 SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET PARALLEL_SERVERS_TARGET = 32 SCOPE = BOTH;
System altered.
# 查看会话和并行限制参数
SQL> SHOW PARAMETER sessions;
NAME TYPE VALUE
———————————— ———– ——————————
sessions integer 172
SQL> SHOW PARAMETER processes;
NAME TYPE VALUE
———————————— ———– ——————————
processes integer 100
SQL> SHOW PARAMETER parallel_max_servers;
NAME TYPE VALUE
———————————— ———– ——————————
parallel_max_servers integer 40
SQL> SHOW PARAMETER parallel_servers_target;
NAME TYPE VALUE
———————————— ———– ——————————
parallel_servers_target integer 32
# 验证会话和并行限制配置成功
3.3 PDB资源限制验证
3.3.1 验证PDB资源限制状态
SQL> ALTER SESSION SET CONTAINER = cdb$root;
Session altered.
# 查看PDB资源限制状态
SQL> SELECT con_id, name, open_mode, total_size, free_space
FROM v$pdbs
ORDER BY con_id;
CON_ID NAME OPEN_MODE TOTAL_SIZE FREE_SPACE
—— ——— ———- ———- ———–
2 PDB$SEED READ ONLY 1048576 524288
3 SALESPDB READ WRITE 1048576 524288
4 HRPDB READ WRITE 1048576 524288
5 APP_ROOT READ WRITE 1048576 524288
6 APP_PDB1 READ WRITE 1048576 524288
# 查看PDB资源限制参数
SQL> SELECT pdb_id, name,
max_cpu_utilization_limit,
max_iops,
max_mbps
FROM dba_pdbs
ORDER BY pdb_id;
PDB_ID NAME MAX_CPU_UTILIZATION_LIMIT MAX_IOPS MAX_MBPS
—— ——— ———————– ———- ———-
3 SALESPDB 80 10000 1000
4 HRPDB 100 0 0
5 APP_ROOT 100 0 0
6 APP_PDB1 100 0 0
# 验证PDB资源限制状态
3.3.2 验证PDB资源限制功能
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看CPU使用情况
SQL> SELECT name, value
FROM v$sysstat
WHERE name IN (‘CPU used by this session’, ‘CPU used when call started’);
NAME VALUE
—————————— ———-
CPU used by this session 12345678
CPU used when call started 123456
# 查看内存使用情况
SQL> SELECT name, value
FROM v$sgainfo
WHERE name IN (‘Total SGA Size’, ‘Free SGA Memory Available’);
NAME VALUE
—————————— ———-
Total SGA Size 838860800
Free SGA Memory Available 209715200
SQL> SELECT name, value
FROM v$pgastat
WHERE name IN (‘total PGA memory allocated’, ‘total freeable PGA memory’);
NAME VALUE
—————————— ———-
total PGA memory allocated 209715200
total freeable PGA memory 52428800
# 查看I/O使用情况
SQL> SELECT name, value
FROM v$sysstat
WHERE name IN (‘physical read total bytes’, ‘physical write total bytes’);
NAME VALUE
—————————— ———-
physical read total bytes 1234567890
physical write total bytes 987654321
# 查看会话数
SQL> SELECT COUNT(*) AS current_sessions,
(SELECT value FROM v$parameter WHERE name = ‘sessions’) AS max_sessions
FROM v$session;
CURRENT_SESSIONS MAX_SESSIONS
—————- ————-
50 150
# 验证PDB资源限制功能成功
Part04-生产案例与实战讲解
4.1 PDB资源限制案例
在某企业的生产环境中,需要为PDB配置资源限制。
– 数据库版本:Oracle 19c
– 系统规模:中等规模,日交易量100万
– 需求:为PDB配置资源限制
# 实施方案
1. 查看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
2. 切换到PDB
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
3. 配置CPU限制
SQL> ALTER SYSTEM SET MAX_CPU_UTILIZATION_LIMIT = 80 SCOPE = BOTH;
System altered.
4. 配置内存限制
SQL> ALTER SYSTEM SET MEMORY_TARGET = 1G SCOPE = BOTH;
System altered.
5. 配置I/O限制
SQL> ALTER SYSTEM SET MAX_IOPS = 10000 SCOPE = BOTH;
System altered.
6. 验证资源限制
SQL> SHOW PARAMETER max_cpu_utilization_limit;
NAME TYPE VALUE
———————————— ———– ——————————
max_cpu_utilization_limit integer 80
SQL> SHOW PARAMETER memory_target;
NAME TYPE VALUE
———————————— ———– ——————————
memory_target big integer 1G
SQL> SHOW PARAMETER max_iops;
NAME TYPE VALUE
———————————— ———– ——————————
max_iops integer 10000
# 实施效果
– 成功配置PDB资源限制
– 资源使用合理
– 资源争用减少
– 数据库性能提高
4.2 PDB资源限制优化案例
在某金融机构的生产环境中,需要优化PDB资源限制,提高资源利用率。
– 数据库版本:Oracle 19c
– 系统规模:大规模,日交易量1000万
– 问题:PDB资源限制需要优化
# 优化方案
1. 查看资源使用情况
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
SQL> SELECT name, value
FROM v$sysstat
WHERE name IN (‘CPU used by this session’);
NAME VALUE
—————————— ———-
CPU used by this session 123456789
2. 查看资源限制参数
SQL> SHOW PARAMETER max_cpu_utilization_limit;
NAME TYPE VALUE
———————————— ———– ——————————
max_cpu_utilization_limit integer 50
3. 优化资源限制
SQL> ALTER SYSTEM SET MAX_CPU_UTILIZATION_LIMIT = 90 SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET MEMORY_TARGET = 2G SCOPE = BOTH;
System altered.
4. 验证优化效果
SQL> SHOW PARAMETER max_cpu_utilization_limit;
NAME TYPE VALUE
———————————— ———– ——————————
max_cpu_utilization_limit integer 90
SQL> SHOW PARAMETER memory_target;
NAME TYPE VALUE
———————————— ———– ——————————
memory_target big integer 2G
5. 查看资源使用情况
SQL> SELECT name, value
FROM v$sysstat
WHERE name IN (‘CPU used by this session’);
NAME VALUE
—————————— ———-
CPU used by this session 234567890
# 优化效果
– 资源限制优化
– 资源利用率提高
– 数据库性能提高
– 资源争用减少
4.3 PDB资源限制问题处理
在某电商网站的生产环境中,PDB资源限制出现问题,需要处理。
– 资源限制不合理
– 系统负载增加
– 资源争用严重
# 分析步骤
1. 查看系统资源
$ free -h
total used free shared buff/cache available
Mem: 15G 10G 2G 500M 3G 4G
Swap: 15G 5G 10G
2. 查看资源使用情况
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
SQL> SELECT name, value
FROM v$sysstat
WHERE name IN (‘CPU used by this session’);
NAME VALUE
—————————— ———-
CPU used by this session 987654321
3. 查看资源限制参数
SQL> SHOW PARAMETER max_cpu_utilization_limit;
NAME TYPE VALUE
———————————— ———– ——————————
max_cpu_utilization_limit integer 30
# 问题原因
– 资源限制不合理
– 资源争用严重
# 解决方案
1. 优化资源限制
SQL> ALTER SYSTEM SET MAX_CPU_UTILIZATION_LIMIT = 80 SCOPE = BOTH;
System altered.
2. 配置I/O限制
SQL> ALTER SYSTEM SET MAX_IOPS = 10000 SCOPE = BOTH;
System altered.
3. 验证资源限制
SQL> SHOW PARAMETER max_cpu_utilization_limit;
NAME TYPE VALUE
———————————— ———– ——————————
max_cpu_utilization_limit integer 80
SQL> SHOW PARAMETER max_iops;
NAME TYPE VALUE
———————————— ———– ——————————
max_iops integer 10000
4. 查看资源使用情况
SQL> SELECT name, value
FROM v$sysstat
WHERE name IN (‘CPU used by this session’);
NAME VALUE
—————————— ———-
CPU used by this session 123456789
# 解决效果
– 资源限制合理
– 数据库性能恢复正常
– 系统负载降低
– 资源争用减少
Part05-风哥经验总结与分享
5.1 PDB资源限制经验
Oracle数据库PDB资源限制经验:
- 规划资源限制架构:根据业务需求规划资源限制架构,最小化资源争用
- 配置资源限制:为PDB配置合理的资源限制
- 监控资源使用:监控资源使用情况,及时发现和处理问题
- 动态调整资源:根据业务需求动态调整资源限制
- 设置资源告警:设置资源告警,及时发现资源争用
- 定期review:定期review资源限制配置,优化资源分配
5.2 PDB资源限制检查清单
– [ ] 检查系统资源
– [ ] 检查CDB架构
– [ ] 检查PDB资源需求
– [ ] 检查CPU资源
– [ ] 检查内存资源
– [ ] 检查I/O资源
– [ ] 规划资源限制架构
– [ ] 配置CPU限制
– [ ] 配置内存限制
– [ ] 验证资源限制功能
# PDB资源限制问题处理流程
1. 检查系统资源
2. 检查CDB架构
3. 检查PDB资源需求
4. 规划资源限制架构
5. 配置CPU限制
6. 配置内存限制
7. 验证资源限制功能
8. 处理资源限制问题
9. 优化配置
10. 监控资源使用情况
5.3 PDB资源限制工具
Oracle数据库PDB资源限制常用工具:
- SQL*Plus:SQL命令行工具,用于执行SQL命令
- Oracle Enterprise Manager:图形化管理工具,用于监控和管理数据库
- AWR报告:自动工作负载存储库报告,用于分析性能
- ASH报告:活动会话历史报告,用于分析会话活动
- SQL Developer:SQL开发工具,用于开发和调试SQL
- DBCA:数据库配置助手,用于创建和管理数据库
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
