13.1. 介绍

PostgreSQL为开发者提供了丰富的对数据并发访问进行管理的工具。 在内部,PostgreSQL利用多版本并发控制(MVCC)来维护数据的一致性。 这就意味着当检索数据时,每个事务看到的都只是一小段时间之前的数据快照(一个数据库版本), 而不是数据的当前状态。这样,通过对每个数据库会话提供事务隔离,就避免了一个事务看到由其它并发事务的更新相同数据行而导致的不一致的数据。MVCC通过避开传统数据库系统封锁的方法,最大限度地减少锁竞争以允许合理的多用户环境中的性能。

使用多版本并发控制比封锁模型的主要优点是在MVCC里, 对检索(读)数据的锁请求与写数据的锁请求不冲突,所以读不会阻塞写,而写也从不阻塞读。甚至当通过创新的可串行化快照隔离 (SSI)级别提供事务隔离的严格等级时, PostgreSQL维持这样的保证。

PostgreSQL里也有表和行级别的封锁机制,用于给那些无法轻松接受MVCC行为的应用。 不过,恰当地使用MVCC总会提供比锁更好的性能。另外,由应用定义的咨询锁提供了一个获得不依赖于单独事务的锁的机制。