查询语句选择tiflash和tikv

【TiDB 使用环境】生产环境
【TiDB 版本】v7.5.7
【遇到的问题:问题现象及影响】
一套集群部署了4个tikv和4个tiflash。业务切流后,所有的查询SQL均走tikv,没有SQL可以命中tiflash组件。
手动执行一些聚合查询,走tikv需要10s+,但是走tiflash仅需0.5s。
调整tidb server的配置文件,开启 enforce-mpp : true并reload tidb server节点。
https://docs.pingcap.com/zh/tidb/v7.5/tidb-configuration-file/#enforce-mpp
调整后,一些点查也会走tiflash,而不是走tikv,导致点查SQL耗时3s+。



是否存在更友好的方式,让优化器可以准确判断出聚合查询走tiflash、点查走tikv。而不是要么走tikv要么走tiflash

表做一下 analyze table就好了,看是不是分区表,保证表的健康度高

1 个赞

tidb_allow_mpp开,tidb_enforce_mpp关,不要开enforce_mpp

这些都是session级别的,应用程序不太能适配,且应用改造比较大。

可以全局设置,set GLOBAL tidb_allow_mpp=on

这个参数默认就是on,但是优化器估的不准。

analyze table,查下表的健康度,不能开强制mpp

健康度都没有问题

让你把这个关了,开着就是所有走强制走tiflash

在聚合查询中添加 /*+ READ_FROM_STORAGE(TIFLASH[tbl]) */ Hint,强制走 TiFlash

检查 TiFlash 副本配置,配置了 TiFlash 副本,优化器才会考虑路由到 TiFlash

强制索引可以吧?

analyze table好像每天4点会定时做一次吧?

关闭 tidb_enforce_mpp (默认关),保留 tidb_allow_mpp=on
对目标表执行 analyze table 校准统计信息;

这两个开关用途是?

确实在走 会走tiflash

时间是自己定的,如果是分区表,并且数据量大的话,不一定会 analyze 到你那个分区,而且是 analyze 你当天的分区,要手动 analyze 历史的分区