多个TiDB之间的统计信息(Statistic)是如何同步的?

【 TiDB 版本】最新版本或者旧版本
【遇到的问题:问题现象及影响】
我阅读了多个TiDB相关文档和博客,没有看到多个TiDB的统计信息(Statistic)是如何在TiDB集群之间传播或者同步的?请问:
1、如果我部署多个TiDB,每个TiDB的统计信息(Statistic)是否会在集群间同步或者进行信息交流?
2、如果统计信息在集群间存在同步或者传播,是怎么实现的?
3、多个TiDB之间的统计信息会存在偏差吗?如果存在,会造成不良影响吗?

表的统计信息是存储在tikv中的
1.如果是多个tidb-server,他们的统计信息都是从tikv读的,所以不存在同步的问题
2.无需同步,因为都是持久化到tikv里的
3.会有偏差,首先tidb-server每次启动会加载统计信息到内存,如果不同的启动时间加载的可能不太一样,另外就算内存中有,有些时候还是需要从tikv中加载最新的统计信息,但这个是有几率超时失败的,可能不同的tidb-server加载不一定都成功,就会造成不同的tidb-server执行的计划不太一样。这个可能会影响sql执行的并不是最优化的执行计划,一般发现这种情况,可能需要人工进行干预

6 个赞

十分感谢!!!

1、统计会持久化到tikv,tidb节点会从tikv同步

3、有偏差,启动加载比较慢,另外有人也遇到过tidb不同节点不同执行计划问题

2 个赞

十分感谢!!

2、如果统计信息在集群间存在同步或者传播,是怎么实现的?
tidb-server启动会从kv拉取缓存在tidb上的,之后的同步更新是随着进行CBO的时候进行的

可以进行表粒度统计信息导入导出

学到了

学习了

tidb没有,tikv直接同步

1 个赞

统计会持久化到tikv,tidb节点会从tikv同步

学到了,感谢大佬

学习了

可以参照下文档 https://docs.pingcap.com/zh/tidb/stable/statistics#统计信息的加载

学习了

统计会持久化到tikv,tidb节点会从tikv读取