kingbase vacuum full命令详解

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

普通 VACUUM 与 VACUUM FULL 核心对比

对比维度 普通 VACUUM VACUUM 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 索引名;
上一篇 vmware workstation pro v25中文免费版下载及安装使用教程
下一篇 Navicat Premium 16 破解版下载及安装使用详细教程

站点性能

运行正常
实时心跳0 ms
页面加载
0
SQL 查询
0
服务端响应
0 ms
峰值内存
0 MB
阿陶学长

阿陶学长管理员

专注于分享最有价值的互联网干货

本月创作热力图

最新评论
暂无评论
AeroCore图片