首页/开发/系统分析与架构设计速查/并发异常与处理手段

并发异常与处理手段

常见并发异常包括丢失更新、写偏斜、幻读与脏写;处理手段有乐观锁(版本号)、悲观锁(行锁或 SELECT FOR UPDATE)与提高隔离级别。

异常

异常现象常用对策
丢失更新两次读改写互相覆盖版本号乐观锁、行锁
写偏斜两个事务各改一半破坏约束可串行化隔离、显式锁
幻读范围查询结果集变化间隙锁、可串行化
脏写覆盖未提交的写入数据库写锁(多数库默认防止)
乐观锁失败要配合重试与幂等,否则用户看到随机报错。

易错点

  • 用“先查再改”实现扣减,未加锁也未用版本号
  • 乐观锁重试次数无上限,冲突时形成重试风暴

数据来源与参考

  • 《数据密集型应用系统设计》(Kleppmann)第 7 章
  • PostgreSQL 文档:Transaction Isolation
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌