使用Limit不走tiflash

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】
生产环境

【概述】 场景 + 问题概述
使用Limit不走tiflash,查询耗时200+秒。不使用Limit会走tiflash,查询耗时20+秒。
5.0.3版本我看把limit下推到tiflash的,为什么这个语句没有被下推

执行计划已上传

【背景】 做过哪些操作

【现象】 业务和数据库现象

【问题】 当前遇到的问题

【业务影响】

【TiDB 版本】
V5.0.3
【应用软件及版本】

【附件】 相关日志及配置信息



sql语句.txt (2.2 KB)
不带limit执行计划.txt (8.2 KB)
带limit执行计划.txt (16.6 KB)

  • TiUP Cluster Display 信息
  • TiUP CLuster Edit config 信息

监控(https://metricstool.pingcap.com/)

  • TiDB-Overview Grafana监控
  • TiDB Grafana 监控
  • TiKV Grafana 监控
  • PD Grafana 监控
  • 对应模块日志(包含问题前后 1 小时日志)

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

1 个赞
  1. 请确认统计信息都正常
    https://docs.pingcap.com/zh/tidb/v5.0/statistics#统计信息简介
  2. 能否试试指定 tiflash ,反馈下指定后的执行计划,多谢。
    https://docs.pingcap.com/zh/tidb/v5.0/optimizer-hints#read_from_storagetiflasht1_name--tl_name--tikvt2_name--tl_name-


limit 10 的试了下,没效果

  1. 麻烦查看下 tiflash 的副本信息,这几张表目前状态是正常的吗?多谢。
SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = '<db_name>' and TABLE_NAME = '<table_name>'
  1. 请确认统计信息都正常 ,show SHOW STATS_HEALTHY where xxx;
    https://docs.pingcap.com/zh/tidb/v5.0/statistics#统计信息简介

用到的表全部更新了健康度、并加入到了tiflash。查询使用强制tiflash,但是只要加上limit后,就有部分算子不会走tiflash,并且性能极差

  1. 麻烦把强制走 tiflash 的执行计划,发一下文本信息
  2. 再试试不强制走 tiflash 的执行计划,也再发一下文本信息,方便对比和之前的执行计划,多谢。

不带强制tiflash执行计划.txt (15.8 KB)
带强制tiflash执行计划.txt (15.6 KB)

帮忙看下

非常感谢,看起来收集统计信息后,已经有部分tiflash 表下推了。
麻烦导出下统计信息,我们再查看下,多谢。
https://docs.pingcap.com/zh/tidb/v4.0/statistics#统计信息的导入导出

不加limit,就全部都走tiflash,没有问题。
加了limit,就不走tiflash了

这是4张表导出的统计信息
cdm_mdm_institution_info等.zip (4.9 MB)

@Polar 您好。发现这边强制走 tiflash 的写法有些问题,在 hint 中使用的表名必须是别名,非常抱歉我们文档中没有明确标明这一点。能否换成别名再试一下?

另外关于优化器自动选择为何没有走到 tiflash,我们内部再看一下,希望能先通过 hint 绕过一下。

谢谢。

1 个赞


强制tiflash表别名查询.txt (15.6 KB)

强制tiflash后,没有一个查询计划走tiflash,你们再看看

Hint 中 TIFLASH[mp] 后多了一个右括号,麻烦去掉右括号再试一下。谢谢。

另外如果 hint 因为某种原因(比如语法错误)没有生效的话,会有一条 warning 报出。所以在执行 query 后可以通过 show warnings 命令看下。

不好意思,强制走tiflash是没问题的。那说明是个bug,你们尽快修复下

好的,感谢您的反馈。我们这边会继续排查为何 limit 对执行计划产生这么大干扰的问题。谢谢。

1 个赞

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