表健康度一直是30,执行analyze也没有用

不像是频繁更新的问题。

表里有522w行,如果需要让healthy掉到30,需要改动522w*0.7= 360w行左右。
半小时才更新几千。

看看日志是否有什么报错信息。

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

确实有个类似的bug,是影响4.0这个版本的。
大致的意思是,触发自动分析有个条件就是1分钟内没有写入。
如果不断地写,就不会触发自动分析。

这也许可以解释为啥自动分析没有触发。但是感觉不应该导致手动分析也没有结果。

产品bug呀

:thinking:这么想一下,确实,我们不少4.0版本的客户有反馈过类似的问题,不过因为行业原因,大部分夜间业务停止,会自动analyze,所以没有特别明显。

2 个赞

关键我手动分析都没啥用

我们写了脚本,健康度低于50就会分析,每天脚本执行两次

更新其实不是太频繁,我们有个核心表,比这个频繁多了

核心表的健康度正常?自动分析也正常?

是啊,自动分析也正常,这个手动分析都没有用

核心表大概5个小时左右健康度就从100降到50以下了,大概一天分析3次,自动一次,手动两次,不然cpu会特别高

应该是更新频繁导致的

关键一直是30,不奇怪吗

1 个赞

show stats_HISTOGRAMS where db_name=‘test’ and table_name=‘kk’\G;


你检查一下这个时间呢,在执行analyze table 表名;后。检查一下直方图的信息

1 个赞

解决了,先把统计信息删了。DROP STATS,在analyzy

2 个赞

删除统计信息的具体语法能发一下吗?

收到。多谢

这是个啥原理?删除原先的统计信息,然后重新分析,感觉类似缓存?

估计是原来统计信息里面某个值是有问题的,然后每次处理都过不去。drop掉重新分析就好了。

1 个赞