group by 后再 order by limit 无法下推 tiflash

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

DESC SELECT doc_id,pub_code,MAX(pub_time) AS pub_time FROM fact_3860
WHERE pub_code = ‘bg_m_sinacn’
GROUP BY doc_id, pub_code
ORDER BY MAX(reply_cnt) DESC
LIMIT 100;

我觉得这是一个很普遍的场景,分组后排序取limit,为什么不能下推到各个coprocessor 取各自 order by limit呢,group by后有千万上亿数据都推给tidb server直接就挂了

  1. 请问 TIDB 是用什么版本?
  2. 麻烦使用 mysql-client 执行一下该 SQL 看看是否有 warning 输出?

4.0.13,如果是5.0.2 一样会把数据推送到tidb 去做order by limit,一样会干爆tidb的

这个sql我们执行完是直接吧生产环境的tidb server down机了 ,都不用看warning了

看截图里面统计信息是不准的。建议先搜集一下统计信息再尝试。提醒一下,如果是线上环境这个表数据量较多的话可以先用 fast analyze 进行收集尝试看是否能解决问题。

上面的图只是一个样例,那我拿个准的,这个一样不能下推,tiflash还是只是读取和groupby,最终的order by limit还是在tidb server,如果数据量大些,tidb 还是一样爆掉

  1. 麻烦提供一下相关的表结构
  2. 导出一下统计信息 https://docs.pingcap.com/zh/tidb/v5.0/statistics#统计信息的导入导出
  3. 可以尝试一下调整 tidb_opt_cpu_factor 这个 session variable 到 10000 ,再 explain 看看。



image
宕机了
表结构.txt (2.2 KB)
统计信息:
static.tar.gz (607.5 KB)

我执行了 analyze table后,统计信息已经更新,还是不行:

请问一下 tidb_opt_cpu_factor 这个 variable 调整了嘛?

调整了,并没有什么用

辛苦试一下 5.0.3 的版本看看 TopN 的算子能否正常下推?

也不行,我们有5.0.3的集群