表空间满载导致写入失败的处理方法

问题现象

应用写入数据时报错:ERROR: could not extend file "base/16384/2619": No space left on device,同时磁盘使用率 100%。

紧急处理步骤

  1. 立即释放空间:清理过期 WAL 日志和临时文件。
    cd /data/kingbase/data/sys_wal # 查看 WAL 大小 du -sh . # 在数据库中执行 checkpoint 后可安全删除已归档的旧 WAL SELECT sys_switch_wal(); -- 触发 WAL 切换 SELECT sys_walfile_name(sys_current_wal_lsn()); -- 当前 WAL 位置
  2. 清理膨胀的表和死元组
    -- 查找占用最大空间的表 SELECT schemaname, relname, sys_size_pretty(sys_total_relation_size(relid)) AS total_size FROM sys_stat_user_tables ORDER BY sys_total_relation_size(relid) DESC LIMIT 10; -- 执行 VACUUM FULL 回收膨胀空间(会短暂锁表) VACUUM FULL big_table;
  3. 扩展表空间:将数据目录迁移或添加软链接到空间更大的磁盘。
    # 添加新表空间(指向新磁盘路径) CREATE TABLESPACE ts_data2 LOCATION '/mnt/disk2/kingbase/data2'; # 将大表迁移到新表空间 ALTER TABLE orders SET TABLESPACE ts_data2;
  4. 配置自动清理(autovacuum)防止再次发生
    # kingbase.conf 中确认 autovacuum 已开启 autovacuum = on autovacuum_vacuum_scale_factor = 0.05 # 5% 死元组触发 autovacuum_analyze_scale_factor = 0.02

VACUUM FULL 会对目标表加排他锁,建议在业务低峰期执行。对于不能停业务的情况,优先使用不加锁的普通 VACUUM,再逐步替换为普通 VACUUM + 索引 REINDEX CONCURRENTLY。
上一篇 Linux 核弹级高危漏洞 CVE-2026-31431 完整修复指南
下一篇 常用的网络攻击方式有哪些?