【 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多张表,一天都跑不完一遍
常用的经常插入更新的表写个脚本定时分析,其他表设置个时间段自动分析。
TIDB这块对统计信息收集的方式跟原生MySQL差异还挺大
毕竟一个是分布式数据库,一个是单体数据库
1 个赞
kv结构和行存差别也很大