请教:大家都是怎么管理统计信息的

【 TiDB 使用环境】生产环境
【 TiDB 版本】V8.5.1
【复现路径】
【遇到的问题:问题现象及影响】
请教下大家,大家的自动更新统计信息是开启的还是关闭的?现在默认是全天开启的,当表中超过 50% 的行被修改时,触发自动 ANALYZE 更新。通过参数tidb_auto_analyze_ratiotidb_enable_auto_analyze控制。是不是如果关闭了,所有库所有表都关闭了?那就得自己来维护大量定时任务去更新统计信息吗?但是如果开启了,频繁的发生统计信息的更新的话,对整体性能应该也会影响较大吧?大家都是如何去平衡这个点的

我们是开启的,每天凌晨执行,超过30%的行修改就触发。为了保险还加了个定时作业,主动analyze。

1 个赞

全天开启?还是只有一段时间开启

0点到6点开启。

一般都是晚上业务低峰期收集,然后有特别大的表的话, 写定时任务手动收集

我们常开,20%变化触发

你这更新的更频繁 :joy:

全天开启。有问题的点再定时去刷新

我们是oltp系统,全库数据量也就几十到100多G

:joy:比我们还狠,直接上强度10%。我觉得我们30%就够频繁了。

统计信息的管理,一般是三板斧管理:

整个集群全局影响/自动收集管理:
1、指定收集时间段,通常选择在集群的业务空闲时间内执行。
2、指定表变更行数的比例,默认是一个表有50%的行发生了变更就会触发,按需调大或调小。
上面的操作集群会自动在后台执行,默认会有限流保护机制,消耗资源低,不影响正常业务,大部分情况下集群无感知。

单个表控制/主动介入管理:
3、主动收集,采用手动或脚本定时执行analyze更新统计信息。
该方式由于是管理员执行的SQL语句,不再是集群自身后台命令,所以不会有限流保护机制,但是默认的收集参数配置也比较低,通常对集群也不会有什么影响,大部分情况下可以采用默认参数执行。极端情况下可以按需调整收集的并发数。

实际上只有一个小表会不停得更新,其他表每天变化都不多

我们的表变化比较多,基本都是日结表、月结表、累计表

全天开启,SQL有性能问题的时候手动收集,也有脚本全量收集统计信息

日常开启,频繁更新的大表定时analyze。