大表auto analyzetable总是失败,应该是什么原因,怎么解?

【 TiDB 使用环境】生产环境
【 TiDB 版本】v5.3.3
【复现路径】一直复现
【遇到的问题:问题现象及影响】
服务器配置今天改成tidb_enable_fast_analyze=ON
tidb集群服务器配置:16C/32G,select * from ANALYZE_STATUS发现有几张上亿的大表的auto analyze table都显示failed
SHOW STATS_META:
modify_count显示约2亿,row_count约9.6千万哪图
【资源配置】
【附件:截图/日志/监控】


tidb_enable_fast_analyze快速分析功能开启后,TiDB 会随机采样约 10000 行的数据来构建统计信息。这种对于生产上的大表,强烈不建议这么收集统计信息。另外这个参数还需要搭配tidb_analyze_version=1一起使用,这个参数你系统设置的多少?
set global tidb_build_stats_concurrency=16;
set global tidb_distsql_scan_concurrency =64;
还是建议找系统空闲的时间段修改上面这俩参数为合适的值,对于哪些大表进行WITH FLOAT_NUM SAMPLERATE采用百分比数据手工收集统计信息更好一点。

并发度不能设置了,想请问下大表怎么设置auto analyze的采样率

concurrency两个值安装已经设置16,64了
analyze table xxxx with 0.1 samplerate;这样采样率执行导致tidb-server直接oom重启

TiDB 从 v6.1.0 开始引入了统计信息收集的内存限制,你可以通过 tidb_mem_quota_analyze 变量来控制 TiDB 更新统计信息时的最大总内存占用。
但是你是5.3,那建议你采样率改成0.01试试,也就是1%。。。。你这表是在有点大

是不是执行时间太长,超过12小时了,如果是,可以增加超时时间

没超时,是表数量有点大,超过gc时间了可能,我现在把采样率设为0.01试试。
不过有个问题虽然6版本有内存限制,但是只是保护server的,analyze对大表仍然还会失败啊,这个你们都怎么解的?手工降低采样率吗?

可以看看OOM是不是因为这个参数影响的


https://docs.pingcap.com/zh/tidb/v5.4/statistics

手动收集吧

我的手工执行经验,速度确实快,我的命令如下,希望对你有所帮助

停止自动收集
set global tidb_auto_analyze_end_time =‘01:00 +0000’; 即时生效
set global tidb_max_auto_analyze_time =600; 即时生效,在设置之前启动的超过这个时间也被kill;

设置并发参数
set global tidb_build_stats_concurrency=8; 这个变量用来设置 ANALYZE 语句执行时并发度。

执行手工收集
analyze table Table_schema.Table_name 手工速度比自动快的多,15分钟已经比自动3个小时执行的数据多了

生产有几张大表,手工执行0.1比率都容易导致tidb-server oom崩溃,只能降低比例为0.01左右

羡慕你们都是6版本,我们最近刚装一套新版本,其它几台是5.2,5.3的能直接升6.5吗?

可以,我从v4.0.11直接升级到v6.5.1了,文章连接如下:

太感谢了

对于大表设置采样率低一点也没关系,千分之一、万分之一都可以试试,主要是analyze的时候不要影响当前集群系统,analyze之后检查下统计信息被更新了就行

大表建议整个脚本手动收集下吧

表太大了吧。

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。