PostgresSQL说:
读者不会阻止作家和作家阻止用户。
让我们假设SERIALIZABLE隔离级别。
大!但是,它怎么可能呢?
但....正在拍摄快照?似乎它必须是阻塞的,否则,如果任何作者在创建快照期间提交更改,则快照可以是无效的。
那么,是否意味着:
读者不会阻止作家和作家阻止用户。
......但是拍了一个快照块。
请解释我:)
答案 0 :(得分:1)
Postgres使用multiversion concurrency control(MVCC)来处理并发。简单地说,这意味着UPDATE
实际上不会修改现有数据,而是将其标记为“已删除”,使用当前事务ID标记它,并创建一个全新的记录。之前的版本仍然存在,任何需要它的人都可以看到。
所以“拍摄快照”实际上并不涉及复制任何数据;它或多或少只是记录了该时间点所有未提交事务的ID,因此服务器可以在扫描表时过滤掉它们的效果。
有关更全面的解释,请查看Bruce Momjian的MVCC Unmasked。