【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
TiDBer_Jack
(Ti D Ber Mk Wfi W Zy)
2
表做一下 analyze table就好了,看是不是分区表,保证表的健康度高
1 个赞
tidb_allow_mpp开,tidb_enforce_mpp关,不要开enforce_mpp
这些都是session级别的,应用程序不太能适配,且应用改造比较大。
diwing
(Ti D Ber R Qstj35v)
5
可以全局设置,set GLOBAL tidb_allow_mpp=on
diwing
(Ti D Ber R Qstj35v)
7
analyze table,查下表的健康度,不能开强制mpp
让你把这个关了,开着就是所有走强制走tiflash
纯白镇的小智
(Ti D Ber Qm Qja01 M)
10
在聚合查询中添加 /*+ READ_FROM_STORAGE(TIFLASH[tbl]) */ Hint,强制走 TiFlash
异乡的大人
(Ti D Ber 2 Qs S2z Ws)
11
检查 TiFlash 副本配置,配置了 TiFlash 副本,优化器才会考虑路由到 TiFlash
analyze table好像每天4点会定时做一次吧?
关闭 tidb_enforce_mpp (默认关),保留 tidb_allow_mpp=on ;
对目标表执行 analyze table 校准统计信息;
TiDBer_Jack
(Ti D Ber Mk Wfi W Zy)
17
时间是自己定的,如果是分区表,并且数据量大的话,不一定会 analyze 到你那个分区,而且是 analyze 你当天的分区,要手动 analyze 历史的分区