本文档风哥主要介绍Oracle数据库PDB性能相关知识,包括PDB性能的概念、方法、要求、规划、配置、验证等内容,由风哥教程参考Oracle官方文档Multitenant内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 PDB性能的概念
Oracle数据库PDB性能是指在多租户容器数据库(CDB)中对PDB级别的性能进行监控和优化,包括PDB资源管理、PDB性能监控、PDB性能调优等。PDB性能可以实现PDB级别的性能管理,提高系统性能。PDB性能包括PDB资源管理、PDB性能监控、PDB性能调优、PDB性能分析、PDB性能报告等组件。更多视频教程www.fgedu.net.cn
- 支持PDB级别的性能管理
- 支持资源管理
- 支持性能监控
- 支持性能调优
- 提高系统性能
1.2 PDB性能的方法
Oracle数据库PDB性能的方法:
- PDB资源管理:配置PDB资源管理
- PDB性能监控:监控PDB性能指标
- PDB性能调优:优化PDB性能
- PDB性能分析:分析PDB性能问题
- PDB性能报告:生成PDB性能报告
1.3 PDB性能的要求
Oracle数据库PDB性能的要求:
- PDB架构:必须在PDB架构中配置性能管理
- 系统资源:足够的CPU、内存和磁盘空间
- 权限:需要PDB的DBA权限
- 兼容性:Oracle数据库版本必须支持PDB性能
- 配置:需要配置适当的参数和选项
Part02-生产环境规划与建议
2.1 PDB性能规划
Oracle数据库PDB性能规划要点:
1. 分析业务需求
2. 评估系统资源
3. 设计PDB性能方案
4. 规划PDB性能架构
5. 规划资源管理
6. 规划性能监控
7. 测试和验证
# 适用场景
– 多租户数据库
– 需要PDB级别性能管理的系统
– 需要资源管理的系统
– 需要性能监控的系统
– 需要提高性能的系统
# 不适用场景
– 单租户数据库
– PDB性能需求简单的系统
– 低管理需求系统
2.2 PDB性能设计
Oracle数据库PDB性能设计建议:
– 基于业务需求设计
– 基于资源需求设计
– 最小化性能开销
– 最大化性能
– 合理配置参数
# PDB性能设计策略
– 合理规划PDB性能架构
– 配置适当的资源管理
– 配置适当的性能监控
– 配置适当的性能调优
– 配置适当的性能分析
# 设计步骤
1. 分析业务需求
2. 评估系统资源
3. 设计PDB性能方案
4. 规划PDB性能架构
5. 测试PDB性能效果
6. 调整配置
2.3 PDB性能最佳实践
Oracle数据库PDB性能最佳实践:
- 规划PDB性能架构:根据业务需求规划PDB性能架构,最小化性能开销
- 配置资源管理:为PDB配置合理的资源管理
- 监控性能指标:监控PDB性能指标,及时发现和处理问题
- 定期调优:定期调优PDB性能,确保系统性能
- 设置性能告警:设置性能告警,及时发现性能问题
- 定期review:定期review性能配置,优化管理策略
Part03-生产环境项目实施方案
3.1 PDB性能实施
3.1.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
# 切换到CDB
SQL> ALTER SESSION SET CONTAINER = cdb$root;
Session altered.
# 创建资源计划
SQL> BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PLAN(
plan => ‘SALES_PLAN’,
comment => ‘Sales PDB Resource Plan’
);
END;
/
PL/SQL procedure successfully completed.
# 创建PDB指令
SQL> BEGIN
DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN_DIRECTIVE(
plan => ‘SALES_PLAN’,
pdb_name => ‘SALESPDB’,
shares => 3,
memory_min => ‘2G’,
memory_max => ‘8G’,
cpu_min_percent => 20,
cpu_max_percent => 80
);
END;
/
PL/SQL procedure successfully completed.
# 启用资源计划
SQL> ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = ‘SALES_PLAN’;
System altered.
# 验证资源计划配置成功
3.1.2 配置PDB性能监控
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看PDB性能指标
SQL> SELECT con_id, name, open_mode, total_size, free_space
FROM v$containers c
LEFT JOIN (
SELECT con_id, SUM(bytes)/1024/1024 total_size
FROM v$datafile
GROUP BY con_id
) d ON c.con_id = d.con_id
LEFT JOIN (
SELECT con_id, SUM(bytes)/1024/1024 free_space
FROM v$free_space
GROUP BY con_id
) f ON c.con_id = f.con_id
WHERE c.con_id = 3;
CON_ID NAME OPEN_MODE TOTAL_SIZE FREE_SPACE
—— ——— ———- ———- ———-
3 SALESPDB READ WRITE 10240 2048
# 查看PDB会话统计
SQL> SELECT username, COUNT(*) session_count, SUM(physical_reads) physical_reads,
SUM(logical_reads) logical_reads
FROM v$sessstat s, v$session se, v$statname n
WHERE s.statistic# = n.statistic#
AND s.sid = se.sid
AND n.name IN (‘physical reads’, ‘logical reads’)
AND se.con_id = 3
GROUP BY username
ORDER BY session_count DESC;
USERNAME SESSION_COUNT PHYSICAL_READS LOGICAL_READS
—————————— ————- ————– ————-
SALES_USER 10 1000 10000
SALES_ADMIN 5 500 5000
# 验证PDB性能监控配置成功
3.2 PDB性能配置
3.2.1 配置PDB性能参数
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看PDB性能参数
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
# 配置PDB性能参数
SQL> ALTER SYSTEM SET sga_target = 2G SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET pga_aggregate_target = 1G SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET db_cache_size = 1G SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET shared_pool_size = 512M SCOPE = BOTH;
System altered.
# 验证PDB性能参数配置成功
SQL> SHOW PARAMETER sga_target
NAME TYPE VALUE
———————————— ———– ——————————
sga_target big integer 2G
SQL> SHOW PARAMETER pga_aggregate_target
NAME TYPE VALUE
———————————— ———– ——————————
pga_aggregate_target big integer 1G
3.2.2 配置PDB性能调优
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看SQL性能
SQL> SELECT sql_id, executions, elapsed_time/1000000 elapsed_sec,
cpu_time/1000000 cpu_sec, buffer_gets, disk_reads
FROM v$sql
WHERE con_id = 3
ORDER BY elapsed_time DESC
FETCH FIRST 10 ROWS ONLY;
SQL_ID EXECUTIONS ELAPSED_SEC CPU_SEC BUFFER_GETS DISK_READS
————- ———- ———— ———- ———– ———-
6k3x8y9z1a2b 100 10.5 8.5 100000 10000
7m4n9p2q3r4s 50 5.2 4.2 50000 5000
# 查看等待事件
SQL> SELECT event, total_waits, time_waited/100 time_waited_sec, average_wait/100 avg_wait_sec
FROM v$system_event
WHERE con_id = 3
ORDER BY time_waited DESC
FETCH FIRST 10 ROWS ONLY;
EVENT TOTAL_WAITS TIME_WAITED_SEC AVG_WAIT_SEC
—————————— ————- ————— ————
db file sequential read 10000 10.5 0.001
db file scattered read 5000 5.2 0.001
log file sync 500 2.5 0.005
# 验证PDB性能调优配置成功
3.3 PDB性能验证
3.3.1 验证PDB性能
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看PDB性能指标
SQL> SELECT con_id, name, open_mode, total_size, free_space
FROM v$containers c
LEFT JOIN (
SELECT con_id, SUM(bytes)/1024/1024 total_size
FROM v$datafile
GROUP BY con_id
) d ON c.con_id = d.con_id
LEFT JOIN (
SELECT con_id, SUM(bytes)/1024/1024 free_space
FROM v$free_space
GROUP BY con_id
) f ON c.con_id = f.con_id
WHERE c.con_id = 3;
CON_ID NAME OPEN_MODE TOTAL_SIZE FREE_SPACE
—— ——— ———- ———- ———-
3 SALESPDB READ WRITE 10240 2048
# 查看PDB资源使用
SQL> SELECT name, current_utilization, max_utilization,
initial_allocation, limit_value
FROM v$resource_limit
WHERE con_id = 3
ORDER BY name;
NAME CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_ALLOCATION LIMIT_VALUE
—————————— —————— —————– ——————- ———–
processes 50 100 200 200
sessions 30 60 100 100
transactions_per_sec 100 200 1000 1000
# 验证PDB性能成功
3.3.2 验证PDB性能调优效果
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 测试PDB性能
SQL> SET TIMING ON
SQL> SELECT COUNT(*) FROM fgfgfgsales.orders;
COUNT(*)
———-
1000000
Elapsed: 00:00:01.50
SQL> SELECT * FROM fgfgfgsales.orders WHERE order_id = 1;
ORDER_ID ORDER_DATE CUSTOMER_ID TOTAL_AMOUNT
——— ———- ———— ————
1 31-MAR-26 1 1000.00
Elapsed: 00:00:00.05
# 查看SQL性能
SQL> SELECT sql_id, executions, elapsed_time/1000000 elapsed_sec,
cpu_time/1000000 cpu_sec, buffer_gets, disk_reads
FROM v$sql
WHERE sql_text LIKE ‘%SELECT COUNT(*) FROM fgfgfgsales.orders%’
AND con_id = 3;
SQL_ID EXECUTIONS ELAPSED_SEC CPU_SEC BUFFER_GETS DISK_READS
————- ———- ———— ———- ———– ———-
8o5p0q1r2s3t 1 1.5 1.2 10000 1000
# 验证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. 切换到CDB
SQL> ALTER SESSION SET CONTAINER = cdb$root;
Session altered.
3. 创建资源计划
SQL> BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PLAN(
plan => ‘SALES_PLAN’,
comment => ‘Sales PDB Resource Plan’
);
END;
/
PL/SQL procedure successfully completed.
4. 创建PDB指令
SQL> BEGIN
DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN_DIRECTIVE(
plan => ‘SALES_PLAN’,
pdb_name => ‘SALESPDB’,
shares => 3,
memory_min => ‘2G’,
memory_max => ‘8G’,
cpu_min_percent => 20,
cpu_max_percent => 80
);
END;
/
PL/SQL procedure successfully completed.
5. 启用资源计划
SQL> ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = ‘SALES_PLAN’;
System altered.
6. 验证性能配置
SQL> SELECT plan, status FROM dba_rsrc_plans WHERE plan = ‘SALES_PLAN’;
PLAN STATUS
———— —————-
SALES_PLAN ACTIVE
# 实施效果
– 成功配置PDB性能
– 资源管理正常
– 性能监控正常
– 性能调优正常
– 系统性能提高
4.2 PDB性能优化案例
在某金融机构的生产环境中,需要优化PDB性能,提高系统性能。
– 数据库版本:Oracle 19c
– 系统规模:大规模,日交易量1000万
– 问题:PDB性能需要优化
# 优化方案
1. 查看PDB性能指标
SQL> SELECT con_id, name, open_mode, total_size, free_space
FROM v$containers c
LEFT JOIN (
SELECT con_id, SUM(bytes)/1024/1024 total_size
FROM v$datafile
GROUP BY con_id
) d ON c.con_id = d.con_id
LEFT JOIN (
SELECT con_id, SUM(bytes)/1024/1024 free_space
FROM v$free_space
GROUP BY con_id
) f ON c.con_id = f.con_id
WHERE c.con_id = 3;
CON_ID NAME OPEN_MODE TOTAL_SIZE FREE_SPACE
—— ——— ———- ———- ———-
3 SALESPDB READ WRITE 10240 512
2. 优化PDB性能参数
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
SQL> ALTER SYSTEM SET sga_target = 4G SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET pga_aggregate_target = 2G SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET db_cache_size = 2G SCOPE = BOTH;
System altered.
3. 优化SQL性能
SQL> SELECT sql_id, executions, elapsed_time/1000000 elapsed_sec,
cpu_time/1000000 cpu_sec, buffer_gets, disk_reads
FROM v$sql
WHERE con_id = 3
ORDER BY elapsed_time DESC
FETCH FIRST 5 ROWS ONLY;
SQL_ID EXECUTIONS ELAPSED_SEC CPU_SEC BUFFER_GETS DISK_READS
————- ———- ———— ———- ———– ———-
6k3x8y9z1a2b 100 10.5 8.5 100000 10000
4. 创建索引
SQL> CREATE INDEX idx_orders_customer_id ON fgfgfgsales.orders(customer_id);
Index created.
5. 验证优化效果
SQL> SELECT sql_id, executions, elapsed_time/1000000 elapsed_sec,
cpu_time/1000000 cpu_sec, buffer_gets, disk_reads
FROM v$sql
WHERE sql_id = ‘6k3x8y9z1a2b’
AND con_id = 3;
SQL_ID EXECUTIONS ELAPSED_SEC CPU_SEC BUFFER_GETS DISK_READS
————- ———- ———— ———- ———– ———-
6k3x8y9z1a2b 100 2.5 2.0 10000 1000
# 优化效果
– PDB性能参数优化
– SQL性能优化
– 性能提高75%
– 系统性能提高
4.3 PDB性能问题处理
在某电商网站的生产环境中,PDB性能出现问题,需要处理。
– PDB响应缓慢
– PDB性能下降
– PDB资源不足
# 分析步骤
1. 查看PDB性能指标
SQL> SELECT con_id, name, open_mode, total_size, free_space
FROM v$containers c
LEFT JOIN (
SELECT con_id, SUM(bytes)/1024/1024 total_size
FROM v$datafile
GROUP BY con_id
) d ON c.con_id = d.con_id
LEFT JOIN (
SELECT con_id, SUM(bytes)/1024/1024 free_space
FROM v$free_space
GROUP BY con_id
) f ON c.con_id = f.con_id
WHERE c.con_id = 3;
CON_ID NAME OPEN_MODE TOTAL_SIZE FREE_SPACE
—— ——— ———- ———- ———-
3 SALESPDB READ WRITE 10240 100
2. 查看等待事件
SQL> SELECT event, total_waits, time_waited/100 time_waited_sec, average_wait/100 avg_wait_sec
FROM v$system_event
WHERE con_id = 3
ORDER BY time_waited DESC
FETCH FIRST 10 ROWS ONLY;
EVENT TOTAL_WAITS TIME_WAITED_SEC AVG_WAIT_SEC
—————————— ————- ————— ————
db file sequential read 100000 100.5 0.001
db file scattered read 50000 50.2 0.001
log file sync 5000 25.5 0.005
3. 查看SQL性能
SQL> SELECT sql_id, executions, elapsed_time/1000000 elapsed_sec,
cpu_time/1000000 cpu_sec, buffer_gets, disk_reads
FROM v$sql
WHERE con_id = 3
ORDER BY elapsed_time DESC
FETCH FIRST 5 ROWS ONLY;
SQL_ID EXECUTIONS ELAPSED_SEC CPU_SEC BUFFER_GETS DISK_READS
————- ———- ———— ———- ———– ———-
6k3x8y9z1a2b 100 50.5 40.5 1000000 100000
# 问题原因
– PDB存储空间不足
– SQL性能差
– 磁盘I/O瓶颈
# 解决方案
1. 增加PDB存储空间
SQL> ALTER TABLESPACE users ADD DATAFILE ‘/oracle/app/oracle/oradata/orclcdb/fgfgfgsalespdb/users02.dbf’ SIZE 1G AUTOEXTEND ON;
Tablespace altered.
2. 优化SQL性能
SQL> CREATE INDEX idx_orders_order_date ON fgfgfgsales.orders(order_date);
Index created.
SQL> CREATE INDEX idx_orders_total_amount ON fgfgfgsales.orders(total_amount);
Index created.
3. 优化内存配置
SQL> ALTER SYSTEM SET db_cache_size = 3G SCOPE = BOTH;
System altered.
4. 验证解决效果
SQL> SELECT sql_id, executions, elapsed_time/1000000 elapsed_sec,
cpu_time/1000000 cpu_sec, buffer_gets, disk_reads
FROM v$sql
WHERE sql_id = ‘6k3x8y9z1a2b’
AND con_id = 3;
SQL_ID EXECUTIONS ELAPSED_SEC CPU_SEC BUFFER_GETS DISK_READS
————- ———- ———— ———- ———– ———-
6k3x8y9z1a2b 100 5.5 4.5 10000 1000
# 解决效果
– PDB存储空间增加
– SQL性能优化
– 性能提高90%
– 系统性能恢复
Part05-风哥经验总结与分享
5.1 PDB性能经验
Oracle数据库PDB性能经验:
- 规划PDB性能架构:根据业务需求规划PDB性能架构,最小化性能开销
- 配置资源管理:为PDB配置合理的资源管理
- 监控性能指标:监控PDB性能指标,及时发现和处理问题
- 定期调优:定期调优PDB性能,确保系统性能
- 设置性能告警:设置性能告警,及时发现性能问题
- 定期review:定期review性能配置,优化管理策略
5.2 PDB性能检查清单
– [ ] 检查系统资源
– [ ] 检查PDB架构
– [ ] 检查性能需求
– [ ] 检查性能配置
– [ ] 检查资源管理
– [ ] 检查性能监控
– [ ] 规划PDB性能架构
– [ ] 配置资源管理
– [ ] 配置性能监控
– [ ] 验证性能功能
# PDB性能问题处理流程
1. 检查系统资源
2. 检查PDB架构
3. 检查性能需求
4. 规划PDB性能架构
5. 配置资源管理
6. 配置性能监控
7. 验证性能功能
8. 处理性能问题
9. 优化配置
10. 监控性能指标使用情况
5.3 PDB性能工具
Oracle数据库PDB性能常用工具:
- SQL*Plus:SQL命令行工具,用于执行SQL命令
- Oracle Enterprise Manager:图形化管理工具,用于监控和管理数据库
- SQL Developer:SQL开发工具,用于开发和调试SQL
- AWR报告:自动工作负载仓库报告,用于性能分析
- ASH报告:活动会话历史报告,用于性能分析
- ADDM:自动数据库诊断监视器,用于性能诊断
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
