并发控制是一种机制,可确保在数据库中同时运行多个交易时,可确保原子能和隔离,这是酸的两个关键特性。在本文中,我们将重点介绍PostgreSQL(流行的开源关系数据库管理系统)中使用的并发控制机制。
并发控制技术
PostgreSQL中使用了三种主要的并发控制技术:
多反转并发控制(MVCC):每个写操作在保留旧版本的同时创建一个新版本的数据项。当交易读取数据项时,系统会选择其中一个版本以确保单个交易的隔离。 PostgreSQL使用称为快照隔离(SI)的MVCC的变体。
严格的两阶段锁定(S2PL):在S2PL中,作家在项目中获得了独家锁,阻止读者直到作者完成。
乐观的并发控制(OCC): OCC假设交易之间的冲突很少,并且允许交易无锁进行。 OCC仅在每次交易结束时检查冲突,并在检测到冲突时退缩。
PostgreSQL将MVCC与快照隔离一起用作其主要并发控制技术。
交易隔离水平
PostgreSQL支持以下交易隔离级别:
读取所承诺的:此级别允许不可重复和幻影读取但可以防止肮脏的读取。
可重复阅读:此级别允许幻影读取但防止了不可重复和肮脏的读取。
序列化:此级别阻止了所有三个异常:肮脏的读数,不可重复的读取和幻影读数。
重要的是要注意,在PostgreSQL版本9.0及更早时,可重复的读取级别被用作序列化,因为它阻止了ANSI SQL-92标准中定义的所有三个异常。但是,随着版本9.1中可序列化快照隔离(SSI)的实现,引入了一个真正的序列化级别,并且可重复的读取级别已更改为当前定义。
事务ID
在PostgreSQL中,为每个事务分配了一个唯一的标识符,称为事务ID(TXID)。当交易开始时,事务管理器将分配一个TXID,即32位未签名的整数。 PostgreSQL储存三个特殊的TXID:0(无效TXID),1(Bootstrap TXID,仅用于数据库群集的初始化)和2个(Frozen TXID)。
。PostgreSQL中的并发控制
postgresql使用快照隔离(SI)用于DML(数据操作语言,例如选择,更新,插入,删除)和严格的两阶段锁定(S2PL)(S2PL)(数据定义语言,例如创建表格等) )。这是PostgreSQL并发控制机制的主要组成部分:
提交日志(堵塞):堵塞持有所有事务状态。
交易快照:交易快照代表了特定事务的数据库的一致视图。
可见性检查规则:可见性检查规则用于确定其他交易可见的交易快照。
防止异常
PostgreSQL的快照隔离(SI)技术可防止ANSI SQL-92标准中定义的三个异常:肮脏的读取,不可重复的读取和幻影读数。但是,SI无法实现真正的序列化性,并且允许序列化异常,例如写偏斜和仅阅读交易偏斜。
为了解决此问题,在PostgreSQL版本9.1中介绍了可序列化快照隔离(SSI)。 SSI检测序列化异常并解决由这种异常引起的冲突,提供了一个真正的序列隔离级别。
结论:PostgreSQL中的并发控制
总而言之,并发控制是任何数据库管理系统中的关键机制,允许多个交易同时执行,同时保持数据库的完整性。 PostgreSQL实现了三种主要并发控制技术:MVCC,S2PL和OCC。其中,MVCC是最受欢迎的,PostgreSQL使用了称为快照隔离(SI)的变体。
SI防止ANSI SQL-92标准中定义的三个异常,但由于允许序列化异常,因此无法实现真正的序列化。为了解决此问题,在PostgreSQL版本9.1及更高版本中介绍了可序列化快照隔离(SSI),该版本提供了一个真正可序列化的隔离级别。
本章讨论了实施并发控制机制所需的关键功能,包括事务ID,元组结构,提交日志(堵塞),事务快照和可见性检查规则。我们还研究了PostgreSQL中并发控制的特定示例,并讨论了PostgreSQL中的事务隔离水平。
总的来说,PostgreSQL的并发控制机制是在数据库环境中管理多个交易的强大工具。它对MVCC和SI的使用可确保交易可以同时读取和写入数据而不相互阻止,而SSI提供了真正的序列化性。通过了解这些概念和技术,数据库管理员和开发人员可以确保其应用程序有效,可扩展和可靠。