pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
目录
本章描述当两个或更多会话试图同时访问同一数据时,PostgreSQL 数据库系统的行为。这种情况下的目标是:在保持严格的数据完整性的同时,让所有会话都能高效访问。每个数据库应用的开发者都应当熟悉本章涵盖的主题。
与使用锁进行并发控制的传统数据库系统不同,PostgreSQL通过使用多版本模型(多版本并发控制,MVCC)来维护数据一致性。这意味着,在查询数据库时,每个事务看到的都是某个较早时刻的数据快照(即一个数据库版本),而不受底层数据当前状态的影响。这样可以保护事务,使其看不到由(其他)并发事务在同一数据行上执行更新所产生的不一致数据,从而为每个数据库会话提供事务隔离。
多版本模型与锁模型的主要区别在于:在 MVCC 中,为查询(读取)数据而获取的锁不会与为写入数据而获取的锁冲突,因此读取永远不会阻塞写入,写入也永远不会阻塞读取。
对于无法轻易适应 MVCC 行为的应用,PostgreSQL 也提供表级和行级锁设施。不过,正确使用 MVCC 通常会比锁提供更好的性能。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。