【发布时间】:2015-08-13 07:12:42
【问题描述】:
在 PostgreSQL 中,MVCC concurrency control 机制表示:
为查询(读取)数据而获取的 MVCC 锁与 为写入数据而获得的锁,因此读取永远不会阻塞写入 写作永远不会阻碍阅读
所以,even for READ_COMMITTED,UPDATE 语句将锁定当前受影响的行,因此其他事务无法修改它们,直到当前事务提交或回滚。
如果并发事务对锁定的行发出 UPDATE,第二个事务将阻塞,直到第一个事务释放它的锁。
在 READ_COMMITTED 中仍然可能发生丢失更新,因为在第一个事务提交后,第二个事务将覆盖该行(即使数据库在 UPDATE 查询开始和查询结束之间发生了变化)。因此,如果仍然可能丢失更新,为什么第二个事务必须等待?难道不能使用行级快照来存储未提交的事务更改以避免事务必须等待写锁被释放吗?
【问题讨论】:
标签: postgresql transactions locking dml mvcc