天天看點

【DB吐槽大會】第20期 - PG pg_upgrade大版本更新不支援增量

背景

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大版本增量更新