TiDB表健康度
健康度的定义:
TiDB表的健康度是反映表统计信息准确性和时效性的一个指标。统计信息,包括表的行数、列的分布情况等,对查询优化器选择最佳查询路径至关重要。
健康度的影响:
- 高的健康度意味着统计信息较为准确,使查询优化器能更有效地工作,从而提高查询性能。
- 低的健康度可能表明统计信息已过时或不准确,这可能导致查询优化器制定出不佳的查询计划,进而影响查询性能。
查看健康度:
在TiDB中,可以使用SHOW STATS_HEALTHY
命令来查看表的健康度。此命令会返回每个表的健康度评分,帮助数据库管理员识别哪些表的统计信息可能需要更新。
维护健康度:
如果表的健康度较低,执行计划不准确,可以通过执行ANALYZE TABLE
命令来手动更新统计信息。在某些情况下,TiDB也可能会自动触发ANALYZE TABLE
以提高健康度。
TiDB自动ANALYZE TABLE
相关参数
TiDB中的自动ANALYZE TABLE
功能涉及多个关键参数,这些参数影响统计信息的收集方式和效率:
-
tidb_auto_analyze_ratio:
- 控制自动更新统计信息的频率。当表中数据的变更量(插入、删除、更新操作影响的行数)与表的总行数之比超过此设置值时,TiDB会触发自动的
ANALYZE TABLE
操作。 - 默认值通常是一个较小的正数,如0.1(10%),表示当表中10%的数据变化时,系统会自动更新统计信息,根据实际业务确定。
- 控制自动更新统计信息的频率。当表中数据的变更量(插入、删除、更新操作影响的行数)与表的总行数之比超过此设置值时,TiDB会触发自动的
-
tidb_auto_analyze_start_time 和 tidb_auto_analyze_end_time:
- 设置自动
ANALYZE TABLE
操作的时间窗口。start_time
指定允许自动分析开始的时间,end_time
指定结束时间。 - 这有助于数据库管理员在系统负载较低时更新统计信息,减少对业务高峰期性能的影响,推荐设置为凌晨
- 设置自动
-
tidb_enable_auto_analyze:
- 布尔类型参数,控制是否启用自动
ANALYZE TABLE
功能。设置为ON
时,TiDB会根据上述参数自动触发统计信息更新。 - 设置为
OFF
时,需要手动执行ANALYZE TABLE
命令来更新统计信息。
- 布尔类型参数,控制是否启用自动
注意:
在执行计划不准确时,可以手动触发ANALYZE TABLE
来进行统计信息的更新。
查询计划不准时
1、重新收集统计信息
2、强制走需求的索引
网友评论