受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: devel

Chapter 13. 并发控制

本章描述 PostgreSQL 数据库系统在两个或更多会话试图同时访问同一数据时的行为。在这种情况下,目标是在保持严格数据完整性的同时,为所有会话提供高效访问。每一个数据库应用开发者都应该熟悉本章涉及的主题。

13.1. 介绍 #

PostgreSQL 为开发者提供了一组丰富的工具来管理对数据的并发访问。在内部,数据一致性是通过使用多版本模型(多版本并发控制,MVCC)来维护的。这意味着,每条 SQL 语句看到的都是某个较早时刻的数据快照(即一个数据库版本),而不受底层数据当前状态的影响。这样可以防止语句看到由并发事务在同一数据行上执行更新所产生的不一致数据,从而为每个数据库会话提供事务隔离MVCC 摒弃了传统数据库系统的加锁方法,尽量减少锁争用,以便在多用户环境中获得合理的性能。

使用 MVCC 并发控制模型而不是加锁的主要优点在于,在 MVCC 中,为查询(读取)数据而获得的锁不会与为写入数据而获得的锁冲突,因此读取不会阻塞写入,写入也不会阻塞读取。 PostgreSQL 甚至在通过创新性的可串行化快照隔离SSI)级别提供最严格的事务隔离时,也保持了这一保证。

PostgreSQL 也提供表级和行级锁设施,供那些通常不需要完整事务隔离、并且倾向于显式管理特定冲突点的应用使用。不过,正确使用 MVCC 通常会比加锁提供更好的性能。此外,由应用定义的咨询锁还提供了一种获取不依附于单个事务的锁的机制。

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。