天天看點

【DB吐槽大會】第69期 - PG 不支援update | delete limit文法

背景

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文法