kingbase vacuum full命令详解

8次阅读
没有评论

共计 1349 个字符,预计需要花费 4 分钟才能阅读完成。

VACUUM FULL 是 KingbaseES 中用于深度回收表与索引磁盘空间、消除数据膨胀的运维命令,是普通 VACUUM 的强化版本。
KingbaseES 中数据被删除 / 更新后,旧数据(死元组 dead tuple)不会立即从物理文件中清除,只是被标记为「不可见」。
  • 普通 VACUUM:仅将死元组标记为「可复用」,表文件的物理大小不变,释放的空间只能被后续新增数据复用,不会还给操作系统。
  • VACUUM FULL:采用重建式收缩机制,真正实现空间释放:
    1. 创建全新的表文件和索引文件;
    2. 将原表中所有存活的有效数据完整复制到新文件中,彻底剔除死元组、碎片和空洞;
    3. 替换旧文件,将多余的磁盘空间直接释放给操作系统。

普通 VACUUM 与 VACUUM FULL 核心对比

对比维度普通 VACUUMVACUUM FULL
空间回收效果仅标记死元组可复用,表物理大小不变,不释放给操作系统重建表文件,彻底收缩体积,空闲空间直接还给操作系统
锁级别共享锁,执行期间不阻塞表的正常读写ACCESS EXCLUSIVE 排它锁,执行期间完全阻塞该表所有读写操作
执行速度快,增量处理死元组,资源占用低慢,全量复制数据,大表可能执行数小时
磁盘额外开销极低,仅产生少量 WAL 日志需要占用与原表大小相当的额外磁盘空间存放临时文件
使用频率日常高频维护(autovacuum 自动后台执行)低频急救操作,仅在严重膨胀时使用
业务影响几乎无感知,后台轻量运行表级业务中断,等同于停机维护

核心作用与适用场景

核心作用

  1. 真正释放磁盘空间,收缩表和索引的物理文件体积;
  2. 根治表 / 索引膨胀,解决「实际数据少、占用磁盘大」的问题;
  3. 数据紧凑排列后,全表扫描、索引扫描的 IO 开销降低,查询性能有一定提升。

适用场景

  1. 表经历过批量删除、大量更新后出现严重膨胀,实际数据量远小于表文件大小,磁盘空间紧张;
  2. 索引严重碎片化、膨胀,普通 REINDEX 无法满足空间收缩需求;
  3. 历史数据归档清理后,需要收缩表体积释放磁盘;
  4. 测试环境重置表空间,为下一轮压测准备干净的数据集。

注意事项

1. 全程锁表,业务完全中断

执行期间会对表加 ACCESS EXCLUSIVE 排它锁,所有 SELECT、INSERT、UPDATE、DELETE 操作都会被阻塞,直到执行完成。生产业务库严禁在业务高峰期执行,必须在维护窗口操作。

2. 需要充足的剩余磁盘空间

执行过程需要创建临时新表文件,要求磁盘剩余空间 ≥ 当前表的实际大小。空间不足会导致执行失败,且已占用的临时空间不会自动释放。

3. 大表执行时长不可控

几十 GB 以上的大表,执行时长可能从几十分钟到数小时不等,期间表完全不可用。执行前务必评估业务停机窗口。

4. 主从集群会放大延迟

主库执行 VACUUM FULL 会生成巨量 WAL 日志,同步到备库后会造成备库回放延迟飙升,备库只读业务会受长时间影响。

5. 禁止全库批量执行

不要直接执行 VACUUM FULL; 对全库所有表操作,会导致全库锁表、业务整体瘫痪。必须逐表评估、逐表执行。

语法

-- 收缩单张表(含表上所有索引)
VACUUM FULL 表名;

-- 收缩表并输出执行进度详情
VACUUM FULL VERBOSE 表名;

-- 收缩表同时更新统计信息
VACUUM FULL ANALYZE 表名;

-- 仅收缩单个索引(不推荐,一般随表一起处理)
VACUUM FULL 索引名;

正文完
 0
数据与人
版权声明:本站原创文章,由 数据与人 于2026-06-29发表,共计1349字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,若要转载请注明出处。
评论(没有评论)