PostgreSQL 19 三月 CommitFest 中与 DBA 课程相关的改进包括:新增 REPACK 命令,合并 VACUUM FULL 与 CLUSTER,并支持 CONCURRENTLY 在线重建;autovacuum 引入按评分排序的优先级机制及并行索引清理;事务 ID 回卷警告提前至一亿事务并显示剩余百分比;检查点完成日志加入原因;可见性映射可在页面访问时更新;新增 pg_stat_lock 锁等待统计视图。
PostgreSQL 19 新增 REPACK 命令,整合 VACUUM FULL 与 CLUSTER,其 CONCURRENTLY 模式可在线重写表,无需扩展,托管服务可用。实测比 pg_repack、pg_squeeze 更快、WAL 更少、失败后无残留。但运行期间会阻碍 VACUUM 清理死元组,末尾换表需短暂 ACCESS EXCLUSIVE 锁,更新删除超约 1.05 亿行会内存耗尽失败,旧快照可能读到空表。
PostgreSQL 19 分支在九天内合入 71 个提交,其中 6 次回滚涉及 74 个提交,回滚原因多为兼容性或稳定性风险,包括外键检查批处理、UPDATE/DELETE FOR PORTION OF、在线校验和切换、DDL 重建函数及标识符大小写折叠等。校验和回滚仅限 19 分支,主分支继续开发。71 个提交中有 15 个涉及 REPACK。
Postgres 19 引入核心功能 REPACK,可在线重写膨胀表以回收空间,无需长时间锁定,支持并发模式。JIT 默认关闭以减少 OLTP 查询开销,查询规划器通过预聚合优化提升性能。其他改进包括 lz4 压缩、锁等待日志、并行自动清理等,预计 2026 年 9 月发布。
Git 的垃圾回收(git gc)用于整理仓库,主要功能包括重打包松散对象、删除过期的 reflog 和不可达对象。手动执行 gc 适用于松散对象增多或磁盘紧张的情况,执行后仓库体积可能减小,并更新对象信息。建议在低峰期进行,以减少对 CPU 和 IO 的占用。
PostgreSQL 19于4月8日功能冻结,社区专注于测试和修复。新版本将支持图数据库、提供pg_plan_advice工具以及无锁表膨胀处理的REPACK功能,预计在9月/10月发布,并将举行PGConf.EU大会。
Postgres 19引入了REPACK命令,解决了表膨胀问题,允许在不锁定整个表的情况下重写表。通过调整autovacuum设置,可以有效管理表的大小。REPACK命令支持并发执行,提升了性能,同时需注意MVCC安全性,为数据库管理员提供了优化工具。
PostgreSQL 19 brings REPACK CONCURRENTLY, a native alternative to pg_repack that rewrites tables without crippling locks.
PostgreSQL 19 已功能冻结,CYBERTEC 贡献显著:pg_squeeze 被整合为内置 REPACK 命令,支持 CONCURRENTLY 在线整理表;延迟多年的 eager aggregation 优化落地。此外,log_lock_waits 默认开启,JIT 因成本估算不可靠改为默认关闭,并修复了 NUMA、CHECKPOINT 等多个问题。
For about fifteen years, the standard answer to “this table is bloated, what do I actually do about it” has been one of the out-of-tree options: pg_repack (the extension), pg_squeeze (Antonin...
PostgreSQL 19引入了REPACK的CONCURRENTLY选项,允许在不获取独占锁的情况下重组表。该功能通过共享更新锁创建初始副本,并利用并发后台工作者进行逻辑解码。尽管存在复制槽资源稀缺和死锁风险等问题,但设计和代码已基本完成,预计将在后续更新中解决。测试结果显示,重组后表大小显著减少,插入性能略有下降,但整体影响不大。
PostgreSQL 19的新特性REPACK通过重写表来物理压缩数据,类似于VACUUM,但创建新文件而非清理现有页面。REPACK CONCURRENTLY允许在操作期间保持表可用,使用快照复制并重放并发更改,确保逻辑身份不变,同时有效回收磁盘空间。
PostgreSQL 19引入了REPACK命令,整合了VACUUM FULL和CLUSTER的功能,简化了用户理解,同时保留了旧命令。REPACK支持重写表以回收磁盘空间,并提供新的进度视图pg_stat_progress_repack。尽管当前不支持并发模式,但未来可能会增加此功能。该命令使用简单,允许用户选择VERBOSE和ANALYZE等选项。
PostgreSQL引入了pg_repack扩展来解决表中的膨胀和碎片化问题。与VACUUM FULL不同,pg_repack允许在线重建表而无需锁定表。操作过程中,pg_repack创建日志表,添加触发器,创建影子表,构建索引,应用更改,交换表,并删除原始表。重要选项包括指定并行连接数,执行在线VACUUM FULL,设置等待超时和绕过超级用户验证。限制包括不能重新组织临时表或通过GiST索引对聚簇表进行重组。建议在低活动期间安排pg_repack,并避免过度使用。
As the database size increases and the number of transactions per second rise, you'll inevitably face the challenge of the table bloat. Although PostgreSQL assists as much as possible with its...
本文介绍了在PostgreSQL中重建表的方法,包括使用VACUUM FULL命令的限制,Oracle中使用DBMS_REDEFINITION包的手动步骤,以及PostgreSQL中的pg_repack扩展。pg_repack可以在不中断读写操作的情况下重建表,并有效去除碎片。使用pg_repack重建表简单且提高数据库性能和存储利用率。
完成下面两步后,将自动完成登录并继续当前操作。