【发布时间】:2020-01-04 21:05:00
【问题描述】:
我正在尝试了解 MVCC,但无法理解。例如。 Transaction1 (T1) 尝试读取一些数据行。在同一时间 T2 更新同一行。
交易的流程是
T1 开始 -> T2 开始 -> T2 提交 -> T1 提交
所以第一个事务获取它的数据库快照并返回用户结果,他将在该结果上构建其他计算。但据我了解,客户获得旧数据价值?据我了解 MVCC,在 T1 事务开始后,该事务不知道其他一些事务更改数据。因此,如果现在用户在那之后进行一些计算(不涉及数据库),他是在对错误的数据进行计算吗?或者我错了,第一笔交易有一些机制可以知道该行已更改?
现在让我们更改交易流程。
T2beg -> T1beg -> T2com -> T1com
在 2PL 中,用户获取更新版本的数据是因为锁(T1 必须等待排他锁释放)。但在 MVCC 的情况下,它仍然是旧数据,因为我了解 postgresql MVCC 模型。所以我可以用过时的数据来换取速度。我对吗?还是我错过了什么?
谢谢
【问题讨论】:
标签: postgresql mvcc