背景
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