SQL昨天还跑得飞快,今天突然变慢——大概率是执行计划变了。在OceanBase里,用Outline绑定执行计划可以一招锁死性能。
三步搞定:
- 获取稳定期的计划
找到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;
- 生成Outline
用DBMS_OUTLN包创建绑定:
CREATE OUTLINE outline_name ON sql_id='你的SQL_ID'
USING HINT /*+ LEADING(t1 t2) USE_NL(t2) */;
HINT里写你想固定的执行路径。
- 验证是否生效
再跑一次SQL,查视图确认:
SELECT * FROM oceanbase.DBA_OB_OUTLINES
WHERE OUTLINE_NAME = 'outline_name';
注意事项:
· 参数变更、统计信息更新不会影响已绑定的Outline
· 删除用DROP OUTLINE outline_name;
· 测试环境先验证,再推生产