天天看點

【DB吐槽大會】第70期 - PG 不支援update | delete skip locked, nowait文法

背景

1、産品的問題點

  • PG 不支援update | delete skip locked, nowait文法

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

  • NOWAIT | SKIP LOCKED 用于 select for update語句, 鎖住某些行, 又不想長時間等待. 提高請求吞吐, 減少等待.
    • nowait 表示如果要鎖的行發生了鎖沖突, 則直接傳回, 不等.
    • skip locked表示跳過有鎖沖突的行, 不等待. 例如有10行是符合條件的, 但是有3行發生了行鎖沖突, 那麼就跳過着3行, 鎖其他7行.

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

  • 通用

4、會導緻什麼問題?

  • 一般select for update後, 緊接着的大多數都是update或者delete操作, 如果是這樣不妨直接支援update | delete skip locked, nowait文法.
  • select for update後, 再執行update或者delete操作, 增加了互動次數, 對于網絡較差或者高并發的小事務場景, 性能影響比較大.

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

  • 可以使用CTE或CTID子句文法模拟一次互動

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

  • 需要了解cte文法, ctid子句文法

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

  • 希望核心可直接支援

    update | delete skip locked, nowait

    文法, 減少互動次數.