💡
原文英文,约1000词,阅读约需4分钟。
📝
内容提要
PostgreSQL引入了pg_repack扩展来解决表中的膨胀和碎片化问题。与VACUUM FULL不同,pg_repack允许在线重建表而无需锁定表。操作过程中,pg_repack创建日志表,添加触发器,创建影子表,构建索引,应用更改,交换表,并删除原始表。重要选项包括指定并行连接数,执行在线VACUUM FULL,设置等待超时和绕过超级用户验证。限制包括不能重新组织临时表或通过GiST索引对聚簇表进行重组。建议在低活动期间安排pg_repack,并避免过度使用。
🎯
关键要点
- PostgreSQL引入pg_repack扩展以解决表中的膨胀和碎片化问题。
- pg_repack允许在线重建表,无需锁定表,避免了VACUUM FULL带来的停机时间。
- VACUUM FULL操作需要独占锁,导致无法进行读写和模式更改,可能造成服务中断。
- pg_repack可以清理表和索引中的多余空间,并在线操作,性能接近直接使用CLUSTER。
- pg_repack的使用要求包括:必须是超级用户,目标表需有主键或唯一索引,重组时需有双倍于目标表大小的可用磁盘空间。
- pg_repack的工作流程包括创建日志表、添加触发器、创建影子表、构建索引、应用更改、交换表和删除原始表。
- pg_repack的关键选项包括指定并行连接数、执行在线VACUUM FULL、设置等待超时和绕过超级用户验证。
- pg_repack的限制包括不能重组临时表和通过GiST索引对聚簇表进行重组。
- 建议在低活动期间安排pg_repack,以减少对生产环境的影响,避免过度使用。
➡️