理解PostgreSQL中并发控制的基础知识
#database #apache #age #postgressql

在此博客中,我们将在PostgreSQL中学习尚未遇到的并发控制的基础知识,但在此之前,请看看什么是并发conrol以及它使用的内容。

并发控制

并发控制是一种机制,用于在数据库中同时运行多个交易时,用于维持酸性。使用了三种主要技术:多反转并发控制(MVCC),严格的两相锁定(S2PL)和乐观的并发控制(OCC)。 MVCC在保留旧版本的同时,在编写数据项时会创建一个新版本。这样可以确保隔离单个交易,读者和作家不会互相阻止。 PostgreSQL和一些RDBMS使用MVCC的变体称为快照隔离(SI)。

现在这看起来可能很复杂,但是在此博客中不用担心,我们只会学习了解并发控制所需的基本知识。

事务ID

在PostgreSQL中,事务管理器将称为事务ID(TXID)的唯一标识符分配给每个事务。 PostgreSQL的TXID是一个32位未签名的整数,允许大约42亿个可能的TXID。当交易开始时,内置的TXID_CURRENT()函数将返回当前TXID。 PostgreSQL储备三个特殊的TXID:0对于无效TXID,1对于仅在数据库群集初始化期间使用的引导TXID,而冷冻TXID则使用2。可以比较TXID,其中大于当前的TXID不可见,而这些TXID比可见。但是,由于TXID空间有限,因此PostgreSQL将其视为过去21亿TXID的圆圈,未来接下来的21亿也是如此。

Image description

元组结构

PostgreSQL表页页面中的一个堆元组由三个部分组成:HeaptupleheaderData结构,空位图和用户数据。 SRC/includ/access/htup_details.h中定义的HeaPtupleHeaderData结构有七个字段,但四个字段与后续部分有关。 T_XMIN字段保留插入元组的交易的TXID,而T_XMAX字段则保留删除或更新元组的事务的TXID(如果未删除或更新元组,则设置为0)。 T_CID字段保留命令ID(CID),指示在当前事务中此命令之前执行了多少个SQL命令(从0开始)。最后,T_CTID字段保存指向自身或新元组的元组标识符(TID)。当更新此元组时,T_CTID指向新的元组,否则,它指向自身。
基本元组结构

Image description

插入,删除和更新元组

本节说明了如何在PostgreSQL中插入,删除和更新的元组,并介绍了用于管理页面上可用空间的自由空间映射(FSM)。插入元组时,其标头字段将基于插入事务的事务ID设置。删除元组时,其T_xmax字段将设置为删除事务的事务ID。在更新中,最新的元组在逻辑上被删除,并插入了新的元组。 PostgreSQL使用FSM根据其自由空间容量选择插入元组的页面。每个表和索引都有一个相应的FSM,可存储其页面的自由空间信息。

所以这个博客跨越了基础知识。现在,我们知道交易ID和元组结构可以通过控制控制。随意研究《 PostgreSQL的内部》一书,以了解更多深度。

参考

The internals of PostgreSQl ch.5