tidb 执行计划绑定

tidb版本升级,v5.3.1升级到v7.5.2,部分sql的执行计划走偏,请问大佬们tidb支持把sql在旧版本的执行计划固化到新集群么?

重新收集下表统计信息吧
ANALYZE TABLE

没有用,收集过了,新集群比旧集群跑的慢

可以关注下代价模型的变化,如果慢sql的数量可控,可以临时考虑在7.5的版本里改成低版本的代价模型,生成好的执行后直接绑定。
v6.5.0开始,新创建的 TiDB 集群默认使用、Cost Model Version 2。

  • 作用域:SESSION | GLOBAL
  • 默认值:2
  • 取值范围:[1, 2]

好的,我拿测试环境试一下,感谢大佬

建议升级前,先保存下当前的执行计划绑定,升级后,如果执行计划绑定没有了,再手动执行下,对比下和升级前的执行计划是否一样,参考链接: 执行计划管理 (SPM) | TiDB 文档中心 (pingcap.com)

sql 多吗,不多加 hint 走过去就好了 :smiley_cat:

因为uat测试下来没啥毛病,这个sql慢也就稍微一点儿点儿,就没管它,谁知道生产的话,慢很多,应该和数据量有关

就三几条,不过有一个调用很频繁

那就使用 binding 进行执行计划绑定就好了

嗯嗯嗯,我先测试一下,谢谢

不建议这么绑定吧,放在sql注释里做绑定不可以嘛

开发不太愿意改sql,不过问题搞定了,改了个参数

tidb_enable_outer_join_reorder
修改了这个参数,执行计划就对了

1 个赞

建议哪类sql有问题,那就给哪类添加hint吧【force index xx】,前提是确定数据分布没问题

嗯嗯,加hint是改动最小的了,但需要开发配合

这个参数,你的执行计划偏离的几个sql都是 join关联查询的?所以才影响的吗?

没试过