Chapter 9. 并发控制

Table of Contents
9.1. 介绍
9.2. 事务隔离
9.2.1. 读已提交隔离级别
9.2.2. 可串行化隔离级别
9.3. 明确锁定
9.3.1. 表级锁
9.3.2. 行级锁
9.3.3. 死锁
9.4. 应用层的数据完整性检查
9.5. 锁和索引

本章描述 PostgreSQL 数据库系统在两个 或者更多会话视图同事访问同样的数据的时候表现出来的样子。 在那种并发访问的情况下的目标是为所有会话提供高效的访问,同时还 要维护严格的数据完整性。每个数据库应用的开发人员都应该熟悉本章 讨论的话题。

9.1. 介绍

与其他使用锁来进行并行控制的数据库系统不同, PostgreSQL 利用多版本模型来维护数据的一致性。 (多版本并发控制,Multiversion Concurrency Control, MVCC)。 这就意味着当检索数据库时,每个事务都看到一个 数据的一段时间前的快照 ( 一个数据库版本), 而不管正在处理的数据当前的状态。这样,如果对每个数据库会话进行 事务隔离, 就可以避免一个事务看到因为其它并行的事务更新 同一行数据而导致的不连贯的数据。

多版本和锁定模型的主要区别是在MVCC里, 对检索(读)数据的锁要求与写数据的锁要求不冲突, 所以读不会阻塞写,而写也从不阻塞读。

PostgreSQL 里也有表和行级别的锁定设施, 用于给那些无法轻松接受 MVCC 行为的应用。 不过,恰当地使用 MVCC 总会提供比锁更好地性能。