TIDB show stats_healthy命令查看表健康度的值是如何计算的

【 TiDB 使用环境】生产环境
【 TiDB 版本】v6.1.7
【遇到的问题:问题现象及影响】 通过执行show stats_healthy查看表健康度的数据,想知道这个健康度的值是如何计算的,哪些参数能影响这个计算结果

modify_count 大于等于 row_count 时,健康度为 0;
modify_count 小于 row_count 时,健康度为 (1 - modify_count / row_count) * 100
modify_count 表示表中被修改的行数,row_count 表示表的总行数。

2 个赞

这个值变化的非常快,导致线上SQL执行计划不准了

表的健康度值变化非常快,应该是由于表的修改频率较高导致的。
你那修改了很多数据吧

可以调整统计信息收集频率,把它降低

线上主要是INSERT+DELETE操作,跟数据变更确实是有关系的

那你统计信息,可以搞个定时,在业务低峰的时候搞

写个脚本,半夜收集统计信息

不用脚本,ANALYZE TABLE 可以 设置定时任务的

1 个赞


默认是 一天时间中随时,可以改成业务低峰跑

有一说一,写个脚本保险一点,双重保障

1 个赞

它自动收集完的,会有问题

也是,双保险

那可以关了自动更新,用脚本搞

可以根据经验或者通过 EXPLAIN ANALYZE 测试选择一条优化过的 SQL 语句,通过 SQL BINDING 将优化过的 SQL 语句与业务代码执行的 SQL 语句绑定

ANALYZE TABLE这个操作吧,执行时间比较长,因为采样表的行数基本都是10%左右,我这个集群总计4000多张表,一天都跑不完一遍 :joy:

常用的经常插入更新的表写个脚本定时分析,其他表设置个时间段自动分析。

TIDB这块对统计信息收集的方式跟原生MySQL差异还挺大

毕竟一个是分布式数据库,一个是单体数据库

1 个赞

kv结构和行存差别也很大