如何改变OB执行计划

【产品名称】

【产品版本】

【问题描述】假如白天业务高峰期,突然发现一个SQL执行很慢,而昨天执行很快。这种情况下如何干预他的执行计划哪?(有类似oracle的收集统计信息吗?)

关于统计信息还有改变执行计划 可以学习一下这篇帖子

https://www.oceanbase.com/community/answer/detail?id=433

如果白天出现性能问题,那就没法解决了?如果程序无法修改代码,那咋整?

白天出现问题:如上面帖子里老师说的后续会支持命令行进行统计信息的收集。

业务不便于修改:可以尝试使用outline 固定执行计划来临时优化。

如果确认是执行计划走错导致很慢,首选方法是将该sql执行计划从缓存中清掉,等重新解析,有一定概率生成期望中的执行计划。如不行,继续。


第二,用outtine生成期望的执行计划替换错误的执行计划。如不行,继续。


第三,发起合并(major freeze),更新统计信息。合并尽管理论上耗点资源,但主机性能有余量的时候,合并也是可以考虑。更何况合并的影响可以通过调整合并并发参数去缓解。此外,还有轮转合并策略,先合并备副本再在线主备切换。


第四,如果还无解,那就用outline对该问题sql限流,最大程度降低问题sql对整个数据库的影响。问题sql让应用修改逻辑或者加 hint 。