analyze table消耗很大内存

收集部分列,把大字段排掉。表结构是否有lob类似的字段?

1 个赞

升级版本吧

  1. 使用更低的采样率:通过减少 ANALYZE TABLE 操作时扫描的数据量,可以降低内存使用。可以通过设置 samplerate 参数为一个小于 1 的值来实现。
  2. 限制并发度:通过设置 tidb_build_stats_concurrency 为一个较低的值,可以减少 ANALYZE TABLE 操作的并发度,从而降低内存消耗。
  3. 使用增量分析:当可能时,使用 INCREMENTAL 选项来仅分析变动的索引,这可以减少需要处理的数据量。
  4. 手动分析:在低负载时段手动执行 ANALYZE TABLE,并使用 WITH NUM BUCKETS 选项来指定直方图的桶数量上限,以控制内存使用。
  5. 调整系统变量:设置 tidb_auto_analyze_ratio 来调整自动分析的阈值,并通过设置 tidb_auto_analyze_start_timetidb_auto_analyze_end_time 来控制自动分析的时间段。
  6. 使用快速分析功能:如果开启 tidb_enable_fast_analyze 系统变量,TiDB 将使用快速分析功能,这可能会加速分析过程但可能牺牲一些统计信息的准确性。

是不是统计信息收集的抽样比例太高了?我们之前试过大表统计信息手动收集,采用自适应的抽样比例,80多张表,总共400多G的数据,花了大概30分钟,而且收集过程中集群的CPU和内存等负载也没啥大的波动。

你升级到8.1性能会好很多

看看新版本是否还是会有一样的情况,是否有优化了

7.1版本 数据库 100多g的表 耗费1g内存。用最新版本吧 8。1