同一条SQL在不同tidb节点,执行计划差异很大

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

  • 【TiDB 版本】:v4.0.0
  • 【问题描述】:

同样一条sql,在不同的tidb节点上执行计划,偏差很大,选择的索引不一样吧,详见如下两个截图:


请问这个需要怎么排查?

  1. 请在 dashboard 界面检查下集群信息,确认下tidb0-server 的hash值是否一致,多谢。

  1. 是否有过升级,某个tidb-server 没有重启?

hash对比一样的
昨天集群有故障,两个tidb都重启过
最近一次升级是6月2号,从3.0.11升级至4.0.0

  1. 麻烦再两个tidb 同时查下 SELECT UNIX_TIMESTAMP() 的值,多谢。
  2. 麻烦看下两个节点 date 的时间

两个节点一致的

麻烦您帮忙导出下,这两个tidb-server的统计信息,多谢。

https://docs.pingcap.com/zh/tidb/stable/statistics#统计信息简介

stats.tar.gz (4.0 MB)

hi 可以帮忙在对 sql 分别在 from xyz o 后面

  • 加 use index(created_at)
  • 加 use index(source_type)

后在这两台 tidb 的 explain 结果吗~ 谢谢

use index created_at 时,两个节点截图如下:

====================================================================================
use index source_type时,截图如下:

1 个赞

多谢,我们再分析下,尽快回复

抱歉,我们可能需要您的表结构来尝试复现问题,是否方便发下表结构,多谢。 如果不方便展示,可以私信发我,麻烦了,多谢。

好的,已发私信,请查收

hi 从调试看目前 15_o.json 对应机器的 idx_to_createdat 的 histgram 统计信息未及时更新

可以先帮通过在 15 那台机器执行

analyze table o index idx_to_createdat;

然后再执行

explain select o.id from o where o.created_at > 1594959855;

看下 IndexReader 预估是否有变为准确的 20 w 级别,谢谢

可以了。

统计信息应该跟tidb节点无关吧?要不如果发现有索引失效,是不是要所有节点都要手工执行一下analyze table。

麻烦按照上楼的建议,反馈一下输出,我们还要再分析一下。

好的。。对 预期情况应该是所有节点都是一致的统计信息出现您遇到情况是非预期的

我们会内部研究并解决这个问题,抱歉

对了, 再确认下 feedback-probability 是不是目前配置是大于 0 的哈?

image

都是默认的,没修改

好的,多谢, 我们有进一步发现或修复会回复该贴

这个帖子有进展后,麻烦也一起同步一下。我们这几天遇到了完全一样的问题。同一个 SQL 两次执行,执行计划完全不一样,性能差异也很大。我们的 TIDB 版本:3.0.8

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。