由于读者不会阻止编写者,编写者也不会阻止读者就是 MVCC 的全部内容,那么 postgresql 如何防止正在将更改提交到块/页面的编写者阻止读者读取这些不一致的数据呢?
因此,根据我对 PostgreSQL MVCC 的理解,每个表都表示为一个堆文件,每个堆文件包含页面/块的集合,这些页面/块是 8 kb 的信息段。
所以说两个事务T1
并发T2
运行并T1
决定对block1
. 因此,首先,在内存中T1
读取并对其进行修改,当最终完成时,它决定提交;block1
即实际上将这些内存中的更改写回block1
. 所以我知道xmax
它修改的先前条目被设置为id(T1)
,并且创建了一个新条目并xmin
设置为id(T1)
。现在我发现困难的是,当实际的提交过程发生时T1
,比如说T2
读取(而写入T1
已经开始但尚未结束)。此案如何处理?
任何答案将不胜感激