Hubert 'depesz' Lubaczewski:等待PostgreSQL 19 – 添加REPACK的CONCURRENTLY选项

💡 原文英文,约700词,阅读约需3分钟。
📝

内容提要

PostgreSQL 19引入了REPACK的CONCURRENTLY选项,允许在不获取独占锁的情况下重组表。该功能通过共享更新锁创建初始副本,并利用并发后台工作者进行逻辑解码。尽管存在复制槽资源稀缺和死锁风险等问题,但设计和代码已基本完成,预计将在后续更新中解决。测试结果显示,重组后表大小显著减少,插入性能略有下降,但整体影响不大。

🎯

关键要点

  • PostgreSQL 19引入了REPACK的CONCURRENTLY选项,允许在不获取独占锁的情况下重组表。
  • 该功能通过共享更新锁创建初始副本,并利用并发后台工作者进行逻辑解码。
  • 重组过程中,应用程序可以正常访问原始表,直到交换时才需要独占锁。
  • 存在复制槽资源稀缺、只能同时运行一个REPACK进程和死锁风险等问题,未来将解决这些问题。
  • 测试结果显示,重组后表大小显著减少,插入性能略有下降,但整体影响不大。

延伸问答

PostgreSQL 19的REPACK的CONCURRENTLY选项有什么新功能?

REPACK的CONCURRENTLY选项允许在不获取独占锁的情况下重组表,创建初始副本时仅使用共享更新锁。

使用REPACK的CONCURRENTLY选项时,应用程序如何访问表?

在重组过程中,应用程序可以正常访问原始表,直到交换时才需要独占锁。

REPACK的CONCURRENTLY选项存在哪些潜在问题?

存在复制槽资源稀缺、只能同时运行一个REPACK进程和死锁风险等问题。

重组表后,表的大小和性能有什么变化?

重组后表大小显著减少,但插入性能略有下降,整体影响不大。

REPACK的CONCURRENTLY选项是如何实现的?

该功能通过共享更新锁创建初始副本,并利用并发后台工作者进行逻辑解码。

REPACK的CONCURRENTLY选项的设计和代码由谁负责?

设计和大部分代码由Antonin Houska负责,基于他的pg_squeeze第三方实现。

➡️

继续阅读