Hubert 'depesz' Lubaczewski:关于从PostgreSQL 12升级到14的(不完整)故事

💡 原文英文,约1600词,阅读约需6分钟。
📝

内容提要

本文介绍了作者在将PostgreSQL从14.x升级到14时遇到的问题及解决方案。作者的环境包括数百个集群,每个集群有至少四个服务器,每个集群只有一个数据库,但有400-500个表,使用了大量模式。作者尝试使用pg_upgrade和逻辑复制进行升级,但遇到了诸多问题,如语言环境变化、复制插槽过多、死锁等。最终,作者通过编写测试脚本解决了复制插槽过多的问题,并使用逻辑复制进行升级。虽然作者对此方法的可靠性不是100%确定,但仍然有希望。

🎯

关键要点

  • 作者在将PostgreSQL从14.x升级到14时遇到的问题及解决方案。
  • 环境包括数百个集群,每个集群至少有四个服务器,且每个集群只有一个数据库。
  • 应用程序通常有400-500个表,使用大量模式,导致数据库对象总数超过200万。
  • 升级过程中遇到的问题包括语言环境变化、复制插槽过多、死锁等。
  • 最初尝试使用pg_upgrade进行升级,但由于对象数量过多,升级时间过长。
  • 使用逻辑复制进行升级,但在测试中发现创建了过多的复制插槽。
  • 通过调整计划,限制每次复制的表数量,解决了复制插槽过多的问题。
  • 在添加索引和约束时,使用pg_restore时发生死锁,最终通过手动添加解决。
  • 在WAL基础复制中,主节点需要保留WAL,导致某些情况下WAL被错误删除。
  • 尝试使用pglogical进行初始同步,但发现无法并行处理,影响系统性能。
  • 编写测试脚本以管理WAL文件,确保在不影响性能的情况下保持复制稳定。
  • 尽管目前的解决方案看起来有效,但作者对最终结果仍持谨慎态度。
➡️

继续阅读