【 TiDB 使用环境】生产环境
【 TiDB 版本】v6.5.4
【复现路径】无。表频繁更新,少量插入。
如题,为什么会出现这种情况?
【 TiDB 使用环境】生产环境
【 TiDB 版本】v6.5.4
【复现路径】无。表频繁更新,少量插入。
如题,为什么会出现这种情况?
同一行更新多次?
举个例子试试
replace into?
是不是统计信息没更新,这样算出来的健康度都是负的
是有这种情况,但是感觉这种情况应该是正常情况吧。
没有这种写法
是有这方面怀疑,现在是手工强制analyze table,但是没找到为什么没有自动analyze
因为是负数,所以不符合统计收集的规则,就放掉了…
确实是这样,现在没有自动收集统计信息。所以想看看是什么原因导致的负数。
你把一个表的所有数据更新两遍,modify_count应该显示count还是count的两倍?
负数不符合统计收集的
但是这样有个很明显的漏洞吧,全量更新后,这个表就永远不会触发自动analyze table了。
healthy难道不是小于多少就自动收集统计信息?还要大于0 吗?
要设置一下,自动analyze
目前是这些表都没有自动analyze,已经计划在应用层实现自动检查自动analyze了
https://github.com/pingcap/tidb/issues/22934
The Root Cause: when the analyze-table statement is processed, the StatsDelta
generated by the previous insert statement has not been handled. When the analyze-table statement finished, we got ModifyCount, RowCount = 0, 5
. And later when TiDB dealt with StatsDelta
, the five rows were count again, and then we got ModifyCount, RowCount = 5, 10
.
这个issue里面的例子是insert,但如果执行的是update,那这么一叠加,应该就会造成ModifyCount>RowCount。
我猜想,这个表以前也是有正常的自动分析的,可能就是自动分析期间执行的update,最后导致某一天ModifyCount>RowCount,然后就不会执行自动分析了。
是的,有这种可能。现在就是觉得book思议,这个问题有点太过于严重了。
eg. ModifyCount/RowCount>0.3
这是在说什么呀