postgres-并发中的读者和作者

时间:2017-11-23 20:25:25

标签: postgresql

PostgresSQL说:

  

读者不会阻止作家和作家阻止用户。

让我们假设SERIALIZABLE隔离级别。

大!但是,它怎么可能呢?

  1. 在读者拍摄快照后,读者看不到作者提交的更改。
  2. 因此,读者在交易过程中无需被阻止,因为他有自己的快照。
  3. 但....正在拍摄快照?似乎它必须是阻塞的,否则,如果任何作者在创建快照期间提交更改,则快照可以是无效的。

  4. 那么,是否意味着:

      

    读者不会阻止作家和作家阻止用户。

  5. ......但是拍了一个快照块。

    请解释我:)

1 个答案:

答案 0 :(得分:1)

Postgres使用multiversion concurrency control(MVCC)来处理并发。简单地说,这意味着UPDATE实际上不会修改现有数据,而是将其标记为“已删除”,使用当前事务ID标记它,并创建一个全新的记录。之前的版本仍然存在,任何需要它的人都可以看到。

所以“拍摄快照”实际上并不涉及复制任何数据;它或多或少只是记录了该时间点所有未提交事务的ID,因此服务器可以在扫描表时过滤掉它们的效果。

有关更全面的解释,请查看Bruce Momjian的MVCC Unmasked