Select FOR UPDATE considered harmful in PostgreSQL
a year ago
- #PostgreSQL
- #Database Concurrency
- #Row Locks
- SELECT FOR UPDATE 会因产生不必要的锁而损害数据库并发性能
- 在READ COMMITTED隔离级别下,当某行在读取和更新之间被修改时会发生丢失更新问题
- PostgreSQL使用FOR KEY SHARE锁来保护外键约束中引用的行
- PostgreSQL中的不同行锁模式:FOR UPDATE(独占锁)、FOR NO KEY UPDATE(非键更新锁)、FOR SHARE(共享锁)和FOR KEY SHARE(键共享锁)
- SELECT FOR UPDATE锁强度过高,可能会阻塞引用表的INSERT操作
- 对于大多数UPDATE操作,建议使用SELECT FOR NO KEY UPDATE以避免不必要的阻塞
- 历史背景:PostgreSQL最初只有FOR SHARE和FOR UPDATE两种锁,后来为提升并发性扩展了锁模式