绑定的执行计划未生效

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:V3.0.3
  • 【问题描述】:绑定执行计划后,执行计划未生效,见图,帮确认下是什么原因,谢谢

看过官网的执行计划绑定相关的文档,但没找到什么有效思路 。通过看force index语法后的sql执行计划,与原sql执行计划,看不出差异,看上去执行计划是一摸一样的

看起来是生效了的,从第二张图中的执行计划来看,的确走了 binding 中要求的 idx_id

第二个图里看执行计划,binding前后是一摸一样的,但看第一个图里的执行时间差很多。

如果生效了,第一个图里的2个sql的执行时间应该是一样的。

请问该怎么排查:是真的生效了呢,或者真的未生效? 这里语法上没出什么错吧

可以用 select connection_id() 获取当前连接的 connection id,然后用 explain for connection xx 来看当前连接中上次执行的 SQL 的执行计划。可以通过这个方式看看那条 SQL 是否用到了 binding 中指定的索引。

另外目前查看一条 SQL 是否使用到了 binding 的确不是很直观,有一个 github issue 在讨论这件事情,可以关注一下提些建议:https://github.com/pingcap/tidb/issues/16425

果然大佬 ,使用 explain for connection xx 方式可以确认bin’dings未生效,如图

我这个binding创建的是global级别的, show global bindings可以看到当前bingding结果, show bindings看不到任何结果。

针对这个问题,目前有解决办法吗 ? 这应该不是global与session级别之前的差异导致的吧

谢谢

有点奇怪,我这里本地用同样的版本构造了一个场景没能复现你的问题,你可以贴一个文字版的完整复现步骤吗?

好的 附件

show session bindings 看不到任何结果

这里指的是结果为空吗?

另外能否再提供一下 mt_order 的表结构,可以通过 show create table mt_order 查看表结构。

show session bindings 看不到任何结果 指的是没有返回结果

表结构如下: 。。。。。

复现了,是一个已经修复了的问题,最新的 3.0.12 已经修复了。

1赞

好的,多谢大佬。看了下3.0.12版本是3月16日发布的,最近会发3.0.13版本吗? 有个tidb集群是3.0.12版本,该版本tidb有出现个日志方面的小问题。期待3.0.13版本

请登陆官网,关注最新动态,敬请期待。

另外,4.0 RC 已发布,欢迎测试~

好的 多谢

:handshake: