tidb SQL执行计划显示走tiflash,执行时间变长

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

【概述】 场景 + 问题概述

±-----------------------------------±--------±----------±----------------------------------------------------------------------------------
| id | estRows | task | access object
±-----------------------------------±--------±----------±----------------------------------------------------------------------------------
| StreamAgg_15 | 1.00 | root |
| └─HashAgg_43 | 9.71 | root | |
| └─IndexLookUp_44 | 9.71 | root | |
| ├─IndexRangeScan_25(Build) | 7157.63 | cop[tikv] | table:t, partition:p20220727, index:idx_xxxx_hour(advertiser_id, report_time) |
| └─HashAgg_39(Probe) | 9.71 | cop[tikv] | |
| └─TableRowIDScan_26 | 7157.63 | cop[tikv] | table:t, partition:p20220727 |
±-----------------------------------±--------±----------±----------------------------------------------------------------------------------
6 rows in set (0.01 sec)

【背景】 做过哪些操作

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

【问题】 当前遇到的问题
两种执行计划,执行计划走tikv效率更高,走tiflash更慢了,不明白为什么执行计划会自动选到tiflash上执行?

【业务影响】

【TiDB 版本】

【应用软件及版本】

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

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

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

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

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

检查一下统计信息的健康度,手动收集一下统计信息再看看优化器选择TiKV还是TiFlash

可能是统计信息问题,重新收集下看看,可能4.0的智能选择还不足够智能,如果不行试试用SPM 加上/*+ READ_FROM_STORAGE(TIKV[t2]) */ 绑定SQL走tikv

正常情况下都是走tikv的,但是有时候会不同,走了tiflash,sql都是一样的,走tiflash概率比较低,但是每次一出现耗时就会达到50s,现在执行计划都是走的tikv,手动执行explain analyze,也不会走tiflash,tiflash的执行计划是在tidb dashboard慢日志里看到的

数据的update和insert比较多,是个大的分区表,偶发的执行计划走tiflash,手动几乎复现不出来

可以考虑做执行计划绑定,使用spm为sql添加READ_FROM_STORAGE,或者考虑择机对数据库版本进行升级

READ_FROM_STORAGE 指定了tiflash,但是实际执行计划还走tikv,主要是想验证下走tiflash是不是真的慢,这样会让人觉得READ_FROM_STORAGE似乎不起作用的感觉,这是因为什么?

下面这样写不生效吗?

/*+ READ_FROM_STORAGE(TIFLASH[t]) */

知道原因了,我用的mysql客户端版本是5.1的,要用5.7.7以上版本hint才会生效,谢谢

该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。