PostgreSQL多版本并发控制简析

本篇基于PostgreSQL9.6版本。 并发引出的问题 在没有任何限制且数据只有一个版本的情况下,多个事务同时执行,可能出现以下问题: 脏读:一个事务读到了其他事务还未提交的数据。 不可重复读:一个事务重复读取同一记录,期间由于其他事务修改该记录并提交,导致读取的内容与之前不同。 幻读:一个事务重复读取符合条件的所有记录,期间由于其他事务新增或删除符合条件的记录,导致读取的结果与之前不同。 如果结合业务场景,可以衍生出更多具体的可讨论的现象。问题的根源在于,事务之间数据的隔离程度的高低。通常,脏读是不能容忍的,因为他操作了不确定的数据。在PostgreSQL中虽然支持多种事务隔离级别,但都不允许出现脏读。 PostgreSQL的事务隔离级别如下图, 并发控制的策略 # 锁 最直接的方式是用锁。锁是加在资源上的,对资源的操