本文档风哥主要介绍Oracle数据库PDB SQL执行相关知识,包括PDB SQL执行的概念、方法、要求、规划、配置、验证等内容,由风哥教程参考Oracle官方文档Multitenant内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 PDB SQL执行的概念
Oracle数据库PDB SQL执行是指在多租户容器数据库(CDB)中对PDB级别的SQL语句进行执行和管理,包括SQL解析、SQL优化、SQL执行、SQL监控等。PDB SQL执行可以实现PDB级别的SQL管理,提高SQL性能。PDB SQL执行包括SQL解析、SQL优化、SQL执行、SQL监控、SQL调优等组件。更多视频教程www.fgedu.net.cn
- 支持PDB级别的SQL执行
- 支持SQL解析
- 支持SQL优化
- 支持SQL监控
- 提高SQL性能
1.2 PDB SQL执行的方法
Oracle数据库PDB SQL执行的方法:
- SQL解析:解析SQL语句
- SQL优化:优化SQL语句
- SQL执行:执行SQL语句
- SQL监控:监控SQL执行
- SQL调优:调优SQL性能
1.3 PDB SQL执行的要求
Oracle数据库PDB SQL执行的要求:
- PDB架构:必须在PDB架构中执行SQL
- 系统资源:足够的CPU、内存和磁盘空间
- 权限:需要PDB的SQL执行权限
- 兼容性:Oracle数据库版本必须支持PDB SQL执行
- 配置:需要配置适当的参数和选项
Part02-生产环境规划与建议
2.1 PDB SQL执行规划
Oracle数据库PDB SQL执行规划要点:
1. 分析业务需求
2. 评估系统资源
3. 设计PDB SQL执行方案
4. 规划PDB SQL执行架构
5. 规划SQL优化策略
6. 规划SQL监控策略
7. 测试和验证
# 适用场景
– 多租户数据库
– 需要PDB级别SQL执行的系统
– 需要SQL优化的系统
– 需要SQL监控的系统
– 需要提高SQL性能的系统
# 不适用场景
– 单租户数据库
– PDB SQL执行需求简单的系统
– 低管理需求系统
2.2 PDB SQL执行设计
Oracle数据库PDB SQL执行设计建议:
– 基于业务需求设计
– 基于资源需求设计
– 最小化SQL开销
– 最大化SQL性能
– 合理配置参数
# PDB SQL执行设计策略
– 合理规划PDB SQL执行架构
– 配置适当的SQL优化
– 配置适当的SQL监控
– 配置适当的SQL调优
– 配置适当的SQL分析
# 设计步骤
1. 分析业务需求
2. 评估系统资源
3. 设计PDB SQL执行方案
4. 规划PDB SQL执行架构
5. 测试PDB SQL执行效果
6. 调整配置
2.3 PDB SQL执行最佳实践
Oracle数据库PDB SQL执行最佳实践:
- 规划PDB SQL执行架构:根据业务需求规划PDB SQL执行架构,最小化SQL开销
- 配置SQL优化:为PDB配置合理的SQL优化
- 监控SQL执行:监控PDB SQL执行,及时发现和处理问题
- 定期调优:定期调优PDB SQL性能,确保SQL性能
- 设置SQL告警:设置SQL告警,及时发现SQL性能问题
- 定期review:定期review SQL配置,优化管理策略
Part03-生产环境项目实施方案
3.1 PDB SQL执行实施
3.1.1 配置SQL解析
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.
# 查看SQL解析参数
SQL> SHOW PARAMETER cursor_sharing
NAME TYPE VALUE
———————————— ———– ——————————
cursor_sharing string EXACT
SQL> SHOW PARAMETER cursor_space_for_time
NAME TYPE VALUE
———————————— ———– ——————————
cursor_space_for_time boolean FALSE
# 配置SQL解析参数
SQL> ALTER SYSTEM SET cursor_sharing = ‘FORCE’ SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET cursor_space_for_time = TRUE SCOPE = BOTH;
System altered.
# 验证SQL解析配置成功
3.1.2 配置SQL优化
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看SQL优化参数
SQL> SHOW PARAMETER optimizer_mode
NAME TYPE VALUE
———————————— ———– ——————————
optimizer_mode string ALL_ROWS
SQL> SHOW PARAMETER optimizer_features_enable
NAME TYPE VALUE
———————————— ———– ——————————
optimizer_features_enable string 19.1.0
# 配置SQL优化参数
SQL> ALTER SYSTEM SET optimizer_mode = ‘ALL_ROWS’ SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET optimizer_features_enable = ‘19.1.0’ SCOPE = BOTH;
System altered.
# 验证SQL优化配置成功
3.2 PDB SQL执行配置
3.2.1 配置SQL执行
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看SQL执行参数
SQL> SHOW PARAMETER parallel_max_servers
NAME TYPE VALUE
———————————— ———– ——————————
parallel_max_servers integer 8
SQL> SHOW PARAMETER parallel_degree_policy
NAME TYPE VALUE
———————————— ———– ——————————
parallel_degree_policy string AUTO
# 配置SQL执行参数
SQL> ALTER SYSTEM SET parallel_max_servers = 16 SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET parallel_degree_policy = ‘AUTO’ SCOPE = BOTH;
System altered.
# 验证SQL执行配置成功
3.2.2 配置SQL监控
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看SQL监控参数
SQL> SHOW PARAMETER statistics_level
NAME TYPE VALUE
———————————— ———– ——————————
statistics_level string TYPICAL
SQL> SHOW PARAMETER timed_statistics
NAME TYPE VALUE
———————————— ———– ——————————
timed_statistics boolean TRUE
# 配置SQL监控参数
SQL> ALTER SYSTEM SET statistics_level = ‘TYPICAL’ SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET timed_statistics = TRUE SCOPE = BOTH;
System altered.
# 验证SQL监控配置成功
3.3 PDB SQL执行验证
3.3.1 验证SQL执行
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 测试SQL执行
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> EXPLAIN PLAN FOR
SELECT * FROM fgfgfgsales.orders WHERE customer_id = 1;
Explained.
SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY());
PLAN_TABLE_OUTPUT
——————————————————————————–
Plan hash value: 1234567890
——————————————————————————–
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
——————————————————————————–
| 0 | SELECT STATEMENT | | 10 | 200 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| ORDERS | 10 | 200 | 3 (0)| 00:00:01 |
——————————————————————————–
# 验证SQL执行成功
3.3.2 验证SQL监控
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 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
# 查看SQL等待事件
SQL> SELECT event, total_waits, time_waited/100 time_waited_sec, average_wait/100 avg_wait_sec
FROM v$sqlarea s, v$system_event e
WHERE s.sql_id = ‘8o5p0q1r2s3t’
AND e.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
# 验证SQL监控成功
Part04-生产案例与实战讲解
4.1 PDB SQL执行案例
在某企业的生产环境中,需要配置PDB SQL执行。
– 数据库版本:Oracle 19c
– 系统规模:中等规模,日交易量100万
– 需求:配置PDB SQL执行
# 实施方案
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. 配置SQL解析
SQL> ALTER SYSTEM SET cursor_sharing = ‘FORCE’ SCOPE = BOTH;
System altered.
4. 配置SQL优化
SQL> ALTER SYSTEM SET optimizer_mode = ‘ALL_ROWS’ SCOPE = BOTH;
System altered.
5. 配置SQL监控
SQL> ALTER SYSTEM SET statistics_level = ‘TYPICAL’ SCOPE = BOTH;
System altered.
6. 验证SQL执行
SQL> SET TIMING ON
SQL> SELECT COUNT(*) FROM fgfgfgsales.orders;
COUNT(*)
———-
1000000
Elapsed: 00:00:01.50
# 实施效果
– 成功配置PDB SQL执行
– SQL解析正常
– SQL优化正常
– SQL执行正常
– SQL性能提高
4.2 PDB SQL执行优化案例
在某金融机构的生产环境中,需要优化PDB SQL执行,提高SQL性能。
– 数据库版本:Oracle 19c
– 系统规模:大规模,日交易量1000万
– 问题:PDB SQL执行需要优化
# 优化方案
1. 查看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 * FROM fgfgfgsales.orders WHERE customer_id =%’
AND 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
2. 优化SQL语句
SQL> CREATE INDEX idx_orders_customer_id ON fgfgfgsales.orders(customer_id);
Index created.
SQL> CREATE INDEX idx_orders_order_date ON fgfgfgsales.orders(order_date);
Index created.
3. 配置SQL优化参数
SQL> ALTER SYSTEM SET optimizer_index_cost_adj = 50 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 2.5 2.0 10000 1000
# 优化效果
– SQL语句优化
– SQL参数优化
– SQL性能提高75%
– 系统性能提高
4.3 PDB SQL执行问题处理
在某电商网站的生产环境中,PDB SQL执行出现问题,需要处理。
– SQL执行缓慢
– SQL性能下降
– SQL等待事件过多
# 分析步骤
1. 查看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 * FROM fgfgfgsales.orders WHERE customer_id =%’
AND 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
2. 查看SQL等待事件
SQL> SELECT event, total_waits, time_waited/100 time_waited_sec, average_wait/100 avg_wait_sec
FROM v$sqlarea s, v$system_event e
WHERE s.sql_id = ‘6k3x8y9z1a2b’
AND e.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
3. 查看SQL执行计划
SQL> EXPLAIN PLAN FOR
SELECT * FROM fgfgfgsales.orders WHERE customer_id = 1;
Explained.
SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY());
PLAN_TABLE_OUTPUT
——————————————————————————–
Plan hash value: 1234567890
——————————————————————————–
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
——————————————————————————–
| 0 | SELECT STATEMENT | | 10 | 200 | 1000 (10)| 00:10:00 |
| 1 | TABLE ACCESS FULL| ORDERS | 10 | 200 | 1000 (10)| 00:10:00 |
——————————————————————————–
# 问题原因
– SQL语句缺少索引
– SQL执行计划不合理
– 磁盘I/O瓶颈
# 解决方案
1. 创建索引
SQL> CREATE INDEX idx_orders_customer_id ON fgfgfgsales.orders(customer_id);
Index created.
2. 收集统计信息
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(
ownname => ‘SALES’,
tabname => ‘ORDERS’,
cascade => TRUE,
estimate_percent => 100
);
PL/SQL procedure successfully completed.
3. 优化SQL语句
SQL> SELECT * FROM fgfgfgsales.orders WHERE customer_id = 1 AND order_date > SYSDATE – 30;
ORDER_ID ORDER_DATE CUSTOMER_ID TOTAL_AMOUNT
——— ———- ———— ————
1 31-MAR-26 1 1000.00
2 31-MAR-26 1 2000.00
3 31-MAR-26 1 3000.00
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
# 解决效果
– SQL索引创建成功
– SQL语句优化
– SQL性能提高90%
– 系统性能恢复
Part05-风哥经验总结与分享
5.1 PDB SQL执行经验
Oracle数据库PDB SQL执行经验:
- 规划PDB SQL执行架构:根据业务需求规划PDB SQL执行架构,最小化SQL开销
- 配置SQL优化:为PDB配置合理的SQL优化
- 监控SQL执行:监控PDB SQL执行,及时发现和处理问题
- 定期调优:定期调优PDB SQL性能,确保SQL性能
- 设置SQL告警:设置SQL告警,及时发现SQL性能问题
- 定期review:定期review SQL配置,优化管理策略
5.2 PDB SQL执行检查清单
– [ ] 检查系统资源
– [ ] 检查PDB架构
– [ ] 检查SQL执行需求
– [ ] 检查SQL执行配置
– [ ] 检查SQL优化
– [ ] 检查SQL监控
– [ ] 规划PDB SQL执行架构
– [ ] 配置SQL解析
– [ ] 配置SQL优化
– [ ] 验证SQL执行功能
# PDB SQL执行问题处理流程
1. 检查系统资源
2. 检查PDB架构
3. 检查SQL执行需求
4. 规划PDB SQL执行架构
5. 配置SQL解析
6. 配置SQL优化
7. 验证SQL执行功能
8. 处理SQL执行问题
9. 优化配置
10. 监控SQL执行使用情况
5.3 PDB SQL执行工具
Oracle数据库PDB SQL执行常用工具:
- SQL*Plus:SQL命令行工具,用于执行SQL命令
- Oracle Enterprise Manager:图形化管理工具,用于监控和管理数据库
- SQL Developer:SQL开发工具,用于开发和调试SQL
- AWR报告:自动工作负载仓库报告,用于SQL性能分析
- ASH报告:活动会话历史报告,用于SQL性能分析
- SQL Tuning Advisor:SQL调优顾问,用于SQL性能优化
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
