天天看點

【DB吐槽大會】第4期 - PG 邏輯日志隻有全局開關

背景

1、産品的問題點

  • PG 邏輯日志隻有全局開關

2、問題點背後涉及的技術原理

  • 如果要支援邏輯增量訂閱, 必須開啟邏輯日志(wal_level=logical), 開啟後在wal日志中會寫入解析邏輯日志的内容, 而這個開關隻能全局設定. (REPLICA IDENTITY=nothing隻能控制old value, 不能控制insert造成的logical log)

3、這個問題将影響哪些行業以及業務場景

  • SaaS行業
  • 多地1中心的隻需要跨地域共享少部分資料表的場景. 例如政務類業務、多地域部署的遊戲、社交業務.

4、會導緻什麼問題?

  • 開啟wal_level=logical後, 日志量會有較大增加. 如果訂閱的表比較少, 實際有用的logical日志占比較少, 造成較大浪費.
  • 如果訂閱的表比較少, 在wal sender端解析時依舊需要解析并過濾不需要的wal, 是以會造成wal的讀浪費, CPU解析浪費.

5、業務上應該如何避免這個坑

  • 業務設計時把需要共享的少部分表拆出, 使用單獨的PG執行個體.

6、業務上避免這個坑犧牲了什麼, 會引入什麼新的問題

  • 增加了複雜度, 需要重新設計執行個體, 如果時已有業務, 還需要考慮表于表之間是否有依賴關系, 比較複雜.

7、資料庫未來産品疊代如何修複這個坑

  • 等核心層支援表級的wal logical開關?

https://github.com/digoal/blog/blob/master/202108/20210826_02.md#postgresql-%E8%AE%B8%E6%84%BF%E9%93%BE%E6%8E%A5 https://github.com/digoal/blog/issues/76