克里克里克
(Ti D Ber H052ej9m)
1
一个好的问题描述有利于社区小伙伴更快帮你定位到问题,高效解决你的问题
【TiDB 使用环境】生产环境 /测试环境
【TiDB 版本】8.5.4
【部署方式】机器部署
【操作系统/CPU 架构/芯片详情】
【机器部署详情】CPU大小/内存大小/磁盘大小
【集群数据量】
【集群节点数】3节点+TiFlash
【问题复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
使用ticdc部署了从库,将主库的慢SQL在从库进行回放,部分SQL比主库慢很多,查看执行计划是,该部分SQL在主库使用了TiFlash,在从库使用了IndexRangeScan,使用hint READ_FROM_STORAGE也无法强制从库的SQL使用TiFlash,ignore_index索引也无法改变其执行计划。hint看起来不生效一样。
配置上,从库的cpu 64,主库是128.从库涉及的表load 了主库的统计信息,因此主从的统计信息也一致。
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【复制黏贴 ERROR 报错的日志】
【其他附件:截图/日志/监控】
Kongdom
(Kongdom)
2
关键从库部署TiFlash,并设置对应表的tiflash副本了吗?
克里克里克
(Ti D Ber H052ej9m)
3
从库有TiFlash,架构和主库一样的,就是cpu核数变成64了。
将tidb_isolation_read_engines去掉tikv,是可以走TiFlash的,但是这样改影响就大了。
现在想对比下从库走TiFlash的消耗和现有的执行计划消耗资源的差别,但是在从库hint不出来。
Kongdom
(Kongdom)
4
先确认在从库里有没有构建这个表的tiflash副本吧
克里克里克
(Ti D Ber H052ej9m)
5
副本是有的,否则tidb_isolation_read_engines=‘tiflash,tidb’,执行查询就会报错l.e。
重新收集统计信息是可以走TiFlash的,RU和执行的效率都比index range快。但是当前为了切从库稳定,从库默认是从主库导出统计信息load进来的,使用主库的统计信息。
你执行explain 语句(带hint),然后执行下show warnning 看有没有用
a8152070
(Ti D Ber S K Lu6 R Df)
7
cpu 不一样,统计信息不一致需要重新收集不是很正常吗
克里克里克
(Ti D Ber H052ej9m)
8
从库的统计信息与主库一致的,从主库dump过来的。
克里克里克
(Ti D Ber H052ej9m)
9
没有warning,AI的分析,tidb的hint不是强制性的,如果认为成本太高,可能就忽略了。
现在就是想构造出来看看执行计划看看cost是不是真的差距太大,因为当前就只有CPU是差一些的。
有没有可能,你mysql的客户端太老了,不支持hint? 换个新1点的客户端或者加个–comments
克里克里克
(Ti D Ber H052ej9m)
12
。。。。。。 竟然真相了,从来没怀疑过是客户端版本过旧的问题。。。。。。。。
哈哈哈 正常 ,谢谢大佬 给我标记为最佳答案,让我拿个15 积分
system
(system)
关闭
14
此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。