【 TiDB 使用环境】生产环境
【 TiDB 版本】V8.5.1
【复现路径】
【遇到的问题:问题现象及影响】
请教下大家,大家的自动更新统计信息是开启的还是关闭的?现在默认是全天开启的,当表中超过 50% 的行被修改时,触发自动 ANALYZE 更新。通过参数tidb_auto_analyze_ratio
和tidb_enable_auto_analyze
控制。是不是如果关闭了,所有库所有表都关闭了?那就得自己来维护大量定时任务去更新统计信息吗?但是如果开启了,频繁的发生统计信息的更新的话,对整体性能应该也会影响较大吧?大家都是如何去平衡这个点的
我们是开启的,每天凌晨执行,超过30%的行修改就触发。为了保险还加了个定时作业,主动analyze。
1 个赞
全天开启?还是只有一段时间开启
0点到6点开启。
一般都是晚上业务低峰期收集,然后有特别大的表的话, 写定时任务手动收集
我们常开,20%变化触发
你这更新的更频繁
全天开启。有问题的点再定时去刷新
我们是oltp系统,全库数据量也就几十到100多G
比我们还狠,直接上强度10%。我觉得我们30%就够频繁了。
统计信息的管理,一般是三板斧管理:
整个集群全局影响/自动收集管理:
1、指定收集时间段,通常选择在集群的业务空闲时间内执行。
2、指定表变更行数的比例,默认是一个表有50%的行发生了变更就会触发,按需调大或调小。
上面的操作集群会自动在后台执行,默认会有限流保护机制,消耗资源低,不影响正常业务,大部分情况下集群无感知。
单个表控制/主动介入管理:
3、主动收集,采用手动或脚本定时执行analyze更新统计信息。
该方式由于是管理员执行的SQL语句,不再是集群自身后台命令,所以不会有限流保护机制,但是默认的收集参数配置也比较低,通常对集群也不会有什么影响,大部分情况下可以采用默认参数执行。极端情况下可以按需调整收集的并发数。
实际上只有一个小表会不停得更新,其他表每天变化都不多
我们的表变化比较多,基本都是日结表、月结表、累计表
全天开启,SQL有性能问题的时候手动收集,也有脚本全量收集统计信息
日常开启,频繁更新的大表定时analyze。