Hasty Briefsbeta

双语

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两种锁,后来为提升并发性扩展了锁模式