手把手教你用Outline绑定执行计划,再也不怕SQL性能回退

SQL昨天还跑得飞快,今天突然变慢——大概率是执行计划变了。在OceanBase里,用Outline绑定执行计划可以一招锁死性能。

三步搞定:

  1. 获取稳定期的计划
    找到SQL_ID和当时快的执行计划:
SELECT SQL_ID, PLAN_ID, ELAPSED_TIME 
FROM oceanbase.GV$OB_SQL_AUDIT 
WHERE QUERY_SQL LIKE '%你的SQL特征%' 
ORDER BY REQUEST_TIME DESC;
  1. 生成Outline
    用DBMS_OUTLN包创建绑定:
CREATE OUTLINE outline_name ON sql_id='你的SQL_ID' 
USING HINT /*+ LEADING(t1 t2) USE_NL(t2) */;

HINT里写你想固定的执行路径。

  1. 验证是否生效
    再跑一次SQL,查视图确认:
SELECT * FROM oceanbase.DBA_OB_OUTLINES 
WHERE OUTLINE_NAME = 'outline_name';

注意事项:

· 参数变更、统计信息更新不会影响已绑定的Outline
· 删除用DROP OUTLINE outline_name;
· 测试环境先验证,再推生产

4 个赞

谢谢

1 个赞

谢谢楼主分享,这个非常有用

1 个赞

学习了,谢谢分享

1 个赞

学习了,谢谢分享

1 个赞

学习了

1 个赞

太有用了

1 个赞