开启TiFlash后 指定索引失效问题

【 TiDB 使用环境】生产环境
【 TiDB 版本】6.5.2
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】


表oms_way_address开启TiFlash后,使用 USE INDEX 、force index 指定索引后仍然走TIFLASH,analyze table后仍是如此。
此表1000万条记录,按 in way_billcode查询20条数据耗时2秒,关闭表oms_way_address的tiflash后,执行只需要0.1秒。
【资源配置】

【附件:截图/日志/监控】

tidb配置文件中的这个配置项配置的什么?
image

2 个赞

tidb_isolation_read_engines = tikv,tiflash,tidb
image

统计信息不准确:TiDB使用统计信息来优化查询计划,如果统计信息不准确,TiFlash可能会选择不合适的索引,导致指定索引失效。解决方法是定期收集和更新统计信息,可以使用"ANALYZE TABLE"语句来手动更新统计信息。
TiFlash元数据同步问题:** 如果TiFlash的元数据与TiDB的元数据不一致,也可能导致指定索引失效。确保TiFlash的元数据与TiDB保持同步,可以尝试重启TiFlash实例,或者使用"flush privileges"等命令来刷新权限和元数据信息。

1 个赞

指定查询引擎呢?
/*+ read_from_storage(tikv[o]) */

https://docs.pingcap.com/zh/tidb/stable/optimizer-hints#read_from_storagetiflasht1_name--tl_name--tikvt2_name--tl_name-

2 个赞

这个sql 应该走kv的,都没啥统计分析,函数啥的,就走flash了。
analyze 跑一下,再看看执行计划

1 个赞

优化器评估有问题,试试drop stats XXX 然后analyze方式更新统计信息, 这期间有可能影响其他SQL 。

1 个赞


指定的查询引擎也没有生效。
(刚才那张表正常了,我换了一张表,出现了同样的状况)

ANALYZE TABLE、flush privileges 后问题依旧

hint里面指定索引/*+ USE_INDEX(t1, idx1) */ 也不行?

1 个赞

drop stats oms_way_transport;
analyze table oms_way_transport ;
问题依旧

是的

:thinking:要不重启集群试试?按描述是有的可以有的不可以呀。

2 个赞

重启了TiFLASH节点,问题依旧

把这个表的tifash副本删了重新加一下试试

1 个赞

这么奇怪,也无法确认恢复正常的表是啥步骤导致的?之前执行过的步骤都试下看看是哪个有效果?

1 个赞

删掉tiflash 副本后,不需要提示,能走索引。再开启Tiflash后又走Tiflash 了

很玄,早上一看,两个表都走tiflash了,昨天恢复正常的表执行了删除tiflash副本重新添加、手动收集统计信息操作(两个表一起执行这些操作后,1个走tikv,一个走tiflash)。

:thinking:相同操作,有的走有的不走,那查询语句和表结构一样么?确实太玄了。

1 个赞

表结构大体一致,查询SQL也是类似的单表查询,where条件和索引字段是一样的。