1. 首页 > Oracle教程 > 正文

Oracle教程FG379-PDB性能

本文档风哥主要介绍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性能的特点:

  • 支持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性能
  • 配置:需要配置适当的参数和选项
风哥提示:PDB性能是Oracle数据库多租户架构的核心功能,通过PDB性能,可以实现PDB级别的性能管理,提高系统性能。

Part02-生产环境规划与建议

2.1 PDB性能规划

Oracle数据库PDB性能规划要点:

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

# 适用场景
– 多租户数据库
– 需要PDB级别性能管理的系统
– 需要资源管理的系统
– 需要性能监控的系统
– 需要提高性能的系统

# 不适用场景
– 单租户数据库
– PDB性能需求简单的系统
– 低管理需求系统

2.2 PDB性能设计

Oracle数据库PDB性能设计建议:

# PDB性能设计原则
– 基于业务需求设计
– 基于资源需求设计
– 最小化性能开销
– 最大化性能
– 合理配置参数

# PDB性能设计策略
– 合理规划PDB性能架构
– 配置适当的资源管理
– 配置适当的性能监控
– 配置适当的性能调优
– 配置适当的性能分析

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

2.3 PDB性能最佳实践

Oracle数据库PDB性能最佳实践:

  • 规划PDB性能架构:根据业务需求规划PDB性能架构,最小化性能开销
  • 配置资源管理:为PDB配置合理的资源管理
  • 监控性能指标:监控PDB性能指标,及时发现和处理问题
  • 定期调优:定期调优PDB性能,确保系统性能
  • 设置性能告警:设置性能告警,及时发现性能问题
  • 定期review:定期review性能配置,优化管理策略
生产环境建议:PDB性能规划应基于业务需求和系统资源,规划PDB性能架构,配置资源管理,监控性能指标,定期调优,设置性能告警,定期review,确保系统性能。学习交流加群风哥微信: itpux-com

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

3.1 PDB性能实施

3.1.1 配置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

# 切换到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性能监控

# 切换到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性能参数

# 切换到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性能调优

# 切换到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性能

# 切换到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性能调优效果

# 切换到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性能调优效果成功

风哥提示:验证PDB性能是否成功,需要检查PDB性能指标、资源使用、性能调优效果等,确保数据库运行正常。学习交流加群风哥QQ113257174

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%
– 系统性能恢复

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

Part05-风哥经验总结与分享

5.1 PDB性能经验

Oracle数据库PDB性能经验:

  • 规划PDB性能架构:根据业务需求规划PDB性能架构,最小化性能开销
  • 配置资源管理:为PDB配置合理的资源管理
  • 监控性能指标:监控PDB性能指标,及时发现和处理问题
  • 定期调优:定期调优PDB性能,确保系统性能
  • 设置性能告警:设置性能告警,及时发现性能问题
  • 定期review:定期review性能配置,优化管理策略
风哥提示:PDB性能是Oracle数据库多租户架构的核心功能,通过规划PDB性能架构,配置资源管理,监控性能指标,定期调优,设置性能告警,定期review,可以显著提高系统性能和数据库管理效率。from oracle:www.itpux.com

5.2 PDB性能检查清单

# 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:自动数据库诊断监视器,用于性能诊断
持续改进:PDB性能是一个持续的过程,需要定期review和优化。建议建立PDB性能的规范和流程,不断改进系统性能和数据库管理效率。

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

联系我们

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

微信号:itpux-com

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