Skip to content

13.1. 简介#

PostgreSQL为开发者提供了丰富的工具来管理对数据的并发访问。在内部,数据一致性通过使用多版本模型(多版本并发控制,MVCC)来维护。这意味着每个 SQL 语句都会看到一段时间的快照数据(一个数据库版本),无论底层数据当前的状态如何。这可以防止语句查看由并发事务对同一数据行执行更新而产生的不一致数据,从而为每个数据库会话提供事务隔离。MVCC通过避开传统数据库系统的锁定方法,最大程度地减少锁定争用,以便在多用户环境中实现合理的性能。

使用MVCC并发控制模型而不是锁定机制的主要优势在于,在MVCC中,为查询(读取)数据获取的锁与为写入数据获取的锁不会发生冲突,因此读取永远不会阻塞写入,而写入永远不会阻塞读取。PostgreSQL即使在通过使用创新的可序列化快照隔离(SSI) 级别提供最严格的事务隔离级别时,也能维持此保证。

PostgreSQL中还提供了表级和行级锁定功能,适用于通常不需要完全事务隔离且更愿意显式管理特定冲突点的应用程序。但是,正确使用MVCC通常会提供比锁定机制更好的性能。此外,应用程序定义的咨询锁提供了一种获取不绑定到单个事务的锁的机制。