背景
1、産品的問題點
- pg_upgrade可以通過遷移中繼資料來支援大版本更新, 但是不支援增量資料.
2、問題點背後涉及的技術原理
- pg_upgrade更新大版本的主要過程:
-
- 使用大版本建立執行個體
- 停庫(老、新執行個體都要停掉) 這裡影響業務
- 檢查大版本和老版本之間的相容性
- 導出中繼資料(結構等)
- 導入中繼資料到新執行個體
- 割接資料檔案指向
3、這個問題将影響哪些行業以及業務場景
- 通用
- 對停機時間非常敏感的客戶, 例如金融,醫療等.
4、會導緻什麼問題?
- 更新過程需要停庫, 直到中繼資料導入完成, 建議等統計資訊重新生成後開啟給使用者使用,
-
- 中繼資料導入耗時取決于中繼資料多少(一般指表、索引等個數).
- 統計資訊重新生成的耗時取決于資料量的多少, 如果不等統計資訊重新生成完成, 可能導緻sql的執行計劃不準确, 有性能問題.
5、業務上應該如何避免這個坑
- 可以使用pglogical這類邏輯增量遷移的工具來實作大版本更新
6、業務上避免這個坑犧牲了什麼, 會引入什麼新的問題
- pglogical有前置依賴
-
- 必須有PK和UK
- 必須開啟wal level=logical, 需要重新開機, 同時會産生更多的wal日志
- pglogical不支援DDL的同步, Sequence的同步等.
- pglogical的使用門檻較高, 一般使用者搞不定.
7、資料庫未來産品疊代如何修複這個坑
- 建議核心層支援pg_upgrade大版本增量更新