背景
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開關?