背景
1、産品的問題點
- PG 不支援update | delete limit文法
2、問題點背後涉及的技術原理
- 更新、删除文法不支援限制條數的用法, 例如: 滿足條件的有1000條, 而使用者一次隻想更新或删除10條.
3、這個問題将影響哪些行業以及業務場景
- 批處理、消費消息隊列的内容
4、會導緻什麼問題?
- 如果符合條件的記錄數很多, 可能導緻一條SQL delete|update的記錄數超多. 如果既有insert又有高吞吐的update,delete, 那麼這種大批量操作将導緻大量tuple舊版本的産生, 并且隻能在事務結束後進行垃圾回收, 進而導緻表膨脹.
-
- 分批操作可以降低單個事務的産生的dead tuple記錄數. 解決單個事務内産生過多舊版本導緻垃圾回收不及時的問題.
5、業務上應該如何避免這個坑
- 可以使用ctid來模拟update | delete limit文法
6、業務上避免這個坑犧牲了什麼, 會引入什麼新的問題
- 沒有太大問題, 但是需要了解ctid的用法
7、資料庫未來産品疊代如何修複這個坑
- 希望核心直接支援update | delete limit文法