1. 首页 > 国产数据库教程 > OceanBase教程 > 正文

OceanBase教程FG171-OceanBase执行计划绑定与固定

本文档风哥主要介绍OceanBase数据库的执行计划绑定与固定功能,包括执行计划的基本概念、绑定与固定的方法、使用场景和优化策略等。风哥教程参考OceanBase官方文档OceanBase执行计划管理指南、OceanBase SQL优化手册等。

通过本文的学习,您将了解如何绑定和固定执行计划,以提高查询性能的稳定性。

目录大纲

Part01-基础概念与理论知识

1.1 执行计划基本概念

执行计划是数据库执行SQL语句的具体步骤,具有以下特点:

  • 执行路径:描述SQL语句的执行路径
  • 操作类型:包括表扫描、索引扫描、连接操作等
  • 执行顺序:描述操作的执行顺序
  • 资源消耗:估计执行所需的资源

1.2 执行计划绑定与固定

执行计划绑定与固定是指将SQL语句与特定的执行计划关联起来,具有以下特点:

  • 执行计划绑定:将SQL语句与执行计划关联,系统会优先使用绑定的执行计划
  • 执行计划固定:将执行计划固定,系统不会自动更新执行计划
  • 稳定性:提高查询性能的稳定性,避免执行计划抖动
  • 可控性:允许用户控制执行计划的选择

1.3 执行计划管理

执行计划管理包括以下内容:

  • 执行计划查看:查看SQL语句的执行计划
  • 执行计划绑定:绑定SQL语句与执行计划
  • 执行计划固定:固定SQL语句的执行计划
  • 执行计划解绑:解除SQL语句与执行计划的绑定
  • 执行计划监控:监控执行计划的使用情况

风哥提示:执行计划绑定与固定可以提高查询性能的稳定性,避免执行计划抖动导致的性能问题

Part02-生产环境规划与建议

2.1 执行计划绑定规划

执行计划绑定规划的建议:

  • 选择合适的SQL语句:选择执行频率高、性能敏感的SQL语句
  • 分析执行计划:分析SQL语句的执行计划,选择最优的执行计划
  • 定期检查:定期检查绑定的执行计划是否仍然最优
  • 版本管理:对绑定的执行计划进行版本管理

2.2 执行计划固定策略

执行计划固定策略的建议:

  • 固定条件:当执行计划稳定且性能良好时,可以固定执行计划
  • 定期评估:定期评估固定的执行计划是否仍然最优
  • 灵活调整:当数据分布或系统环境变化时,及时调整执行计划
  • 监控告警:监控固定执行计划的性能,及时发现问题

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

3.1 执行计划绑定

,风哥提示:。

执行计划绑定的方法:

# 1. 查看执行计划

EXPLAIN SELECT * FROM fgedu_order WHERE user_id = 100;
                    

+—-+————-+————-+————+——+—————————+—————————+———+——-+——+———-+——-+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+—-+————-+————-+————+——+—————————+—————————+———+——-+——+———-+——-+
| 1 | SIMPLE | fgedu_order | NULL | ref | idx_fgedu_order_user_id | idx_fgedu_order_user_id | 8 | const | 2 | 100.00 | NULL |
+—-+————-+————-+————+——+—————————+—————————+———+——-+——+———-+——-+

# 2. 绑定执行计划

-- 方法1:使用CREATE PLAN
CREATE PLAN FOR SELECT * FROM fgedu_order WHERE user_id = 100;

-- 方法2:使用DBMS_XPLAN.BIND_PLAN
EXEC DBMS_XPLAN.BIND_PLAN(
    sql_text => 'SELECT * FROM fgedu_order WHERE user_id = 100',
    plan_name => 'plan_fgedu_order_user_id'
);
                    

Query OK, 0 rows affected (0.05 sec),学习交流加群风哥微信: itpux-com。

3.2 执行计划固定

执行计划固定的方法:

# 1. 固定执行计划

-- 方法1:使用ALTER PLAN
ALTER PLAN plan_fgedu_order_user_id FIXED;

-- 方法2:使用DBMS_XPLAN.FIX_PLAN
EXEC DBMS_XPLAN.FIX_PLAN(plan_name => 'plan_fgedu_order_user_id');
                    

Query OK, 0 rows affected (0.05 sec)

3.3 执行计划管理

执行计划管理的方法:

# 1. 查看绑定的执行计划

SELECT * FROM DBA_PLANS;
                    

+———–+————————-+———-+———-+———————+———————+
| PLAN_NAME | SQL_TEXT | FIXED | ENABLED | CREATED | LAST_MODIFIED |
+———–+————————-+———-+———-+———————+———————+
| plan_fgedu_order_user_id | SELECT * FROM fgedu_order WHERE user_id = 100 | YES | YES | 2026-04-09 10:00:00 | 2026-04-09 10:00:00 |
+———–+————————-+———-+———-+———————+———————+

# 2. 解绑执行计划

,学习交流加群风哥QQ113257174。
-- 方法1:使用DROP PLAN
DROP PLAN plan_fgedu_order_user_id;

-- 方法2:使用DBMS_XPLAN.UNBIND_PLAN
EXEC DBMS_XPLAN.UNBIND_PLAN(plan_name => 'plan_fgedu_order_user_id');
                    

Query OK, 0 rows affected (0.05 sec)

Part04-生产案例与实战讲解

4.1 执行计划绑定实战

执行计划绑定的实战案例:

场景描述

某电商系统的订单查询SQL执行计划不稳定,需要绑定执行计划以提高性能稳定性。

实施步骤

  1. 分析SQL语句
  2. 查看执行计划
  3. 绑定执行计划
  4. 验证绑定效果

# 1. 分析SQL语句

SELECT * FROM fgedu_order WHERE user_id = 100 AND status = 'COMPLETED';
                    

# 2. 查看执行计划

,更多视频教程www.fgedu.net.cn。
EXPLAIN SELECT * FROM fgedu_order WHERE user_id = 100 AND status = 'COMPLETED';
                    

+—-+————-+————-+————+——+———————————-+———————————-+———+————-+——+———-+——-+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+—-+————-+————-+————+——+———————————-+———————————-+———+————-+——+———-+——-+
| 1 | SIMPLE | fgedu_order | NULL | ref | idx_fgedu_order_user_id,idx_fgedu_order_status | idx_fgedu_order_user_id | 8 | const | 2 | 50.00 | Using where |
+—-+————-+————-+————+——+———————————-+———————————-+———+————-+——+———-+——-+

# 3. 绑定执行计划

CREATE PLAN FOR SELECT * FROM fgedu_order WHERE user_id = 100 AND status = 'COMPLETED';
                    

Query OK, 0 rows affected (0.05 sec)

# 4. 验证绑定效果

EXPLAIN SELECT * FROM fgedu_order WHERE user_id = 100 AND status = 'COMPLETED';
                    

+—-+————-+————-+————+——+———————————-+———————————-+———+————-+——+———-+————————+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+—-+————-+————-+————+——+———————————-+———————————-+———+————-+——+———-+————————+
| 1 | SIMPLE | fgedu_order | NULL | ref | idx_fgedu_order_user_id,idx_fgedu_order_status | idx_fgedu_order_user_id | 8 | const | 2 | 50.00 | Using where; Using plan |
+—-+————-+————-+————+——+———————————-+———————————-+———+————-+——+———-+————————+

4.2 执行计划固定实战

执行计划固定的实战案例:

,更多学习教程公众号风哥教程itpux_com。

场景描述

某电商系统的订单查询SQL执行计划已经优化,需要固定执行计划以避免执行计划抖动。

实施步骤

  1. 绑定执行计划
  2. 固定执行计划
  3. 验证固定效果
  4. 监控执行计划

# 1. 绑定执行计划

CREATE PLAN plan_fgedu_order_query FOR SELECT * FROM fgedu_order WHERE user_id = 100 AND status = 'COMPLETED';
                    

Query OK, 0 rows affected (0.05 sec)

# 2. 固定执行计划

ALTER PLAN plan_fgedu_order_query FIXED;
                    

Query OK, 0 rows affected (0.05 sec)

,from DB视频:www.itpux.com。

# 3. 验证固定效果

SELECT * FROM DBA_PLANS WHERE plan_name = 'plan_fgedu_order_query';
                    

+————————+—————————————–+———-+———-+———————+———————+
| PLAN_NAME | SQL_TEXT | FIXED | ENABLED | CREATED | LAST_MODIFIED |
+————————+—————————————–+———-+———-+———————+———————+
| plan_fgedu_order_query | SELECT * FROM fgedu_order WHERE user_id = 100 AND status = ‘COMPLETED’ | YES | YES | 2026-04-09 10:00:00 | 2026-04-09 10:00:00 |
+————————+—————————————–+———-+———-+———————+———————+

# 4. 监控执行计划

-- 查看执行计划使用情况
SELECT * FROM V$OB_PLAN_USAGE WHERE plan_name = 'plan_fgedu_order_query';
                    

+————————+———-+———————+———————+
| PLAN_NAME | USAGE_COUNT | FIRST_USE_TIME | LAST_USE_TIME |
+————————+———-+———————+———————+
| plan_fgedu_order_query | 10 | 2026-04-09 10:00:00 | 2026-04-09 10:30:00 |
+————————+———-+———————+———————+

Part05-风哥经验总结与分享

5.1 执行计划绑定与固定最佳实践

OceanBase执行计划绑定与固定的最佳实践:

  • 选择合适的SQL语句:选择执行频率高、性能敏感的SQL语句
  • 分析执行计划:分析SQL语句的执行计划,选择最优的执行计划
  • 定期检查:定期检查绑定的执行计划是否仍然最优
  • 版本管理:对绑定的执行计划进行版本管理
  • 灵活调整:当数据分布或系统环境变化时,及时调整执行计划
  • 监控告警:监控固定执行计划的性能,及时发现问题
  • 测试验证:在生产环境之前,测试执行计划绑定与固定的效果

5.2 常见问题与解决方案

执行计划绑定与固定中常见的问题与解决方案:

# 1. 执行计划绑定失败
- 症状:执行计划绑定失败
- 解决方案:检查SQL语句是否正确,执行计划是否有效

# 2. 执行计划固定后性能下降
- 症状:固定执行计划后性能下降
- 解决方案:分析数据分布变化,重新优化执行计划

# 3. 执行计划抖动
- 症状:执行计划频繁变化
- 解决方案:绑定并固定执行计划

# 4. 执行计划过期
- 症状:执行计划不再适合当前数据分布
- 解决方案:定期更新执行计划

# 5. 执行计划管理混乱
- 症状:执行计划过多,管理混乱
- 解决方案:建立执行计划管理规范,定期清理不必要的执行计划
                

风哥提示:执行计划绑定与固定是提高查询性能稳定性的重要手段,需要根据业务需求和系统环境合理使用

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

联系我们

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

微信号:itpux-com

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