analyze 不会自动执行

1709717815599


健康度低于阀值没有执行统计

自动收集统计信息表级别是串行的,看下mysql.analyze_jobs表里记录的正在执行和历史执行的统计信息收集任务

tidb_auto_analyze_ratio 的最小值为 0.3 你改0.2没用

设置了 也没有执行啊

历史执行里也找不到纪录吗

1、注意时区
2、检查参数 tidb_enable_auto_analyze
3、表里有多少数据?低于1000行也不会触发

这个问题我也遇到过了,对于表比较多,每张表行数较多的场景,会有这个问题,<6.5之前的版本系统是串行做的analyze table,效率很低,>=6.5的版本支持并发做了,但是从健康度校准这块TIDB做的不是很完美,我们也在REVIEW这块的源码,看看是否可以添加更多的协程做

一般是不满足anto analyze条件。

多中场景在触发auto analyze前,SQL响应耗时就增加几倍~几十倍了 :sweat_smile:

两个数值 0.3 1000

如楼上几位大佬所说的,
1、tidb_enable_auto_analyze是否打开;
2、要关注是否满足auto_analyze的tidb_auto_analyze_ratio阈值(最小是0.3);
3、表里数据是否低于1000行,低于1000行不会触发自动收集统计信息;

1 个赞

5.2 好像没这个参数tidb_enable_auto_analyze,查不到这个参数,是不是时间区域有问题 要设置+0800

检查下是否开启了该参数,以及触发条件

5.2 没有这个tidb_enable_auto_analyze参数

不好意思,之前没有注意版本号,这个是5.2版本对应的FAQ


https://docs.pingcap.com/zh/tidb/v5.2/sql-faq#在-tidb-中-auto-analyze-的触发策略是怎样的

触发条件还是得查查

表里数据不够1000吧

有2000万条记录

都查了还是不行



1709776497248

改成1 试试