空分区表收集分区统计信息很慢

【 TiDB 使用环境】生产环境
【 TiDB 版本】6.5.1
【遇到的问题:问题现象及影响】
有一张分区表,是个空表,但是手动收集单个分区的统计信息要4分多钟,而且大部分时间是在merge global stats的那一步,请问这个是怎么回事呢,能加速或者跳过合并全局这一步吗?

show table XXX regions看看这表有多少个region

有226个region

动态裁剪模式下分析了分区的统计信息后,会读取其他分区的统计信息,然后将分区集的统计信息 计算为global级统计信息。 可以试试关闭动态裁剪功能 set@@tidb_partition_prune_mode = ‘static’ ,测试环境试试吧,这会影响SQL执行计划。

statistics: optimize the global histogram merging algorithm

  1. remove empty buckets
  2. introduce a damping factor when calculating bucket NDV
  3. limit the minimum size of global buckets
  4. adjust bucket boundaries according to NDV
  5. disable bucket NDV in global-stats

直接drop了重建吧,分区表也可以删除分区,空间delete是不可能释放的,

别跳过,那样跟不收集差不多。跳过或加速合并全局统计信息的步骤可能会导致全局统计信息的不准确性

是不是这个导致的

分区表统计信息收集 Bug ,比如新增一个分区后,收集统计信息没有获取这个新分区的元数据,导致没有收集 详情 https://book.tidb.io/session4/chapter6/partition-table-problem-handling.html

分区表谨慎analyze table,搞个阈值,我们当时一个分区30多秒

关闭分区动态裁剪肯定不合适,原来是truncate分区的方式清理的,我让改成drop方式了,分区数量减少维持在较低数量后,merge global stats的速度就快了很多。

嗯,没跳过,改成删除空分区

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