【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 个赞
Meditator
(Wendywong020)
2022 年2 月 18 日 03:40
4
SHOW STATS_BUCKETS命令输出中count是当前bucket以及在这之前的bucket中的总行数,我在5.2中测试在healthy 是100的情况下是准确的(或者show stats_meta查看下Modify_count的确切值),方便的话,可以把你的过程贴出来。
2 个赞
我的版本是4.x,用5.2对照说明不合适。
步骤是:
1.先analyze table
2.SHOW STATS_HEALTHY 发现对应的表健康度是100
3.使用STATS_BUCKETS 并过滤对应的表,发现统计的count值和实际用upper和lower做范围查询不一致,差距有点大
特别说明:测试表,测试期间基本没有变更
h5n1
(H5n1)
2022 年3 月 2 日 07:50
8
能贴出来看看嘛,count指的是包含前面所有桶内值的数量,还有个repeat,最大值数量。 按理说tidb收集统计信息都全扫描了没理由用抽样的估算值
1 个赞