内容提要
PostgreSQL 19的新特性REPACK通过重写表来物理压缩数据,类似于VACUUM,但创建新文件而非清理现有页面。REPACK CONCURRENTLY允许在操作期间保持表可用,使用快照复制并重放并发更改,确保逻辑身份不变,同时有效回收磁盘空间。
关键要点
-
REPACK是PostgreSQL 19的新特性,通过重写表来物理压缩数据。
-
REPACK与VACUUM的不同之处在于,它创建新的表文件,而不是清理现有页面。
-
REPACK CONCURRENTLY允许在操作期间保持表可用,使用快照复制并重放并发更改。
-
REPACK在逻辑身份不变的情况下,有效回收磁盘空间。
-
REPACK的核心工作在于cluster_rel()和rebuild_relation(),处理权限检查、关系检查和索引重建。
-
REPACK的并发模式使用逻辑解码来处理在复制过程中发生的更改。
-
REPACK的设计旨在缩短强锁阶段,以提高并发性能。
-
REPACK与VACUUM FULL相似,能够物理压缩表并返回空间给操作系统。
延伸问答
PostgreSQL 19中的REPACK功能是什么?
REPACK是PostgreSQL 19的新特性,通过重写表来物理压缩数据,创建新的表文件而非清理现有页面。
REPACK与VACUUM的主要区别是什么?
REPACK创建新的表文件来压缩数据,而VACUUM主要是在现有页面内清理,通常无法完全返回空间给操作系统。
REPACK CONCURRENTLY是如何工作的?
REPACK CONCURRENTLY允许在操作期间保持表可用,通过快照复制并重放并发更改,确保逻辑身份不变。
REPACK的核心工作流程是什么?
REPACK的核心工作在于cluster_rel()和rebuild_relation(),处理权限检查、关系检查和索引重建。
REPACK如何处理并发更改?
REPACK使用逻辑解码来处理在复制过程中发生的更改,确保新表在最终交换时是最新的。
REPACK的设计目标是什么?
REPACK的设计旨在缩短强锁阶段,以提高并发性能,同时有效回收磁盘空间。