生产环境tidb机器重启后,统计信息丢失

global memory controller tries to kill the top1 memory consumer
[tidb_server_memory_limit=52200947680] [“heap inuse”=52549206016] [“sql memory usage”=1646045787]
生产环境出现tidb因为内存挤爆了导致服务tidb节点重启,但每次统计信息不是自己自动加载而是需要手动执行,请问是哪个配置出现了问题导致的,自动重启会丢失统计信息?

有点没看懂,你怎么看出统计信息丢失的?

就是tidb节点自己重启后我们sql执行索引选择有问题,需要重刷统计信息才变正常

应该是tidb-server缓存的统计信息因为重启导致不一致了吧,有时候多个tidb-server会因为缓存的信息不一致而导致同一条sql走不同的执行计划。

我们只有一个tdib节点,这个节点内存溢出自动重启之后,需要全量手刷一次就正常了,不然好多sql都很慢,这种我理解不应该是重启会把统计信息加载一次到内存么?

咦,难道是关了自动更新?https://docs.pingcap.com/zh/tidb/stable/statistics#关闭自动更新
或者时间间隔设定太久?

1 个赞

tidb-service节点不重启都是正常的,自己会自动更新统计信息

https://github.com/pingcap/tidb/issues/43385

像是这个issue。

怎么说呢,因为tidb-server是无状态节点,实际tidb集群的统计信息都是存在tikv里面的,如果每次重启tidb-server就把所有的统计信息加载一次,可能tidb重启需要的时间会很长,这段时间实际你的tidb-server就不能对外提供服务了。。。
如果需要调整加载统计信息的配置,看下这个吧,可以调整下试试
https://docs.pingcap.com/zh/tidb/v6.5/statistics#统计信息的加载

统计哪些信息啊

建议升级到6.5.3,修复了统计信息加载慢的问题。6.5.3之前,如果有很多大表,确实加载会比较慢。
你直接grep 'init stats' tidb.log,看下统计信息加载用了多长时间

应该是我这个问题一样,后续在6.5.3版本修复了,我线上环境测试,升级前统计信息加载时间最少也得十多分钟(有时候会直接加载失败),升级后只需要10几秒

TiDB 重启时发生了异常,导致统计信息没有正确保存到 TiKV 中
TiDB 重启后,统计信息的加载速度较慢,导致查询时无法使用最新的统计信息
TiDB 重启后,统计信息的版本过低,导致查询时无法使用最新的统计信息
检查 TiDB 的日志,看是否有报错或者警告信息,定位重启的原因和影响
手动执行 ANALYZE TABLE 语句,强制更新统计信息
调整 tidb_auto_analyze_ratio 和 tidb_auto_analyze_start_time 参数,控制自动分析的触发条件和时间
调整 tidb_stats_loading_threads 参数,增加加载统计信息的并发度

看看这个 [https://github.com/pingcap/tidb/issues/43385 ](https://github.com/pingcap/tidb/issues/43385]

是每次重启都要 ANALYZE table一下?这个我司线上之前也是,你们现在走了tiflash吗

可以参考一下这个回答,历史版本的统计信息加载比较慢,甚至有概率加载失败。升级最新版本就可以了,这个BUG已经被修复了。

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。