tidb统计信息STATS_BUCKETS表不准确疑问

【TiDB 使用环境】:生产/测试/POC

测试

【TiDB 版本】

4.0.10

【出现的问题】

1.使用 show STATS_BUCKETS where db_name='xxx ’ and table_name=‘xx’ and COLUMN_name=‘xx’
显示的count列数值不准确,根据lower_bound 和 upper_bound去实际查询,数量有差异
2.COLUMN_name 是联合主键的第一个
3.重新执行过analyze table 并且SHOW STATS_HEALTHY 检查健康度是100

执行结果:
结果1.统计信息

结果2.count查询

结果3.健康度

我的疑问是,到底STATS_BUCKETS 的count列能不能反映实际的数据量?

2 个赞

统计信息收集的太频繁会影响数据库的性能,所以一般统计信息跟实际情况是有时间差的

2 个赞

我手工执行analyze 且健康度是100 ,产生的统计信息也会和实际有差异吗

2 个赞

SHOW STATS_BUCKETS命令输出中count是当前bucket以及在这之前的bucket中的总行数,我在5.2中测试在healthy 是100的情况下是准确的(或者show stats_meta查看下Modify_count的确切值),方便的话,可以把你的过程贴出来。

2 个赞

理论上如果数据库动态变化着的时候都可能有差异

1 个赞

试过把联合主键的字段都写上的结果吗?

2 个赞

我的版本是4.x,用5.2对照说明不合适。
步骤是:
1.先analyze table
2.SHOW STATS_HEALTHY 发现对应的表健康度是100
3.使用STATS_BUCKETS 并过滤对应的表,发现统计的count值和实际用upper和lower做范围查询不一致,差距有点大

特别说明:测试表,测试期间基本没有变更

能贴出来看看嘛,count指的是包含前面所有桶内值的数量,还有个repeat,最大值数量。 按理说tidb收集统计信息都全扫描了没理由用抽样的估算值

1 个赞

重新上传了截图,麻烦看下