PostgreSQL multixact日志管理器说明
MultiXactID日志是uxdb系统用来记录组合事务ID的一种日志。由于uxdb采用了多版本并发控制,因此同一个元组相关联的事务ID可能有多个,为了在加锁(行共享锁)的时候统一操作,uxdb将与该元组相关联的多个事务ID组合起来用一个MultiXactID代替来管理。同CLOG、Subtrans日志一样,MultiXact日志也是利用SLRU缓冲池来实现。
MultiXact日志管理器相关数据结构
MultiXactID是一个多对一的映射关系,需要在事务ID数组中标记哪一段映射到一个MultiXactID。所以在映射的过程中需要存储两种信息,即需要标志一段事务ID的偏移量(Offset),还需要激励这段偏移量的大小(nMembers)。
由于需要对MultiXactdID的分配进行维护,于是定义了数据结构MultiXactStateData。
MultiXactStateData用来管理和维护MultiXactID,另外还需要定义一个统一的接口来操作MultiXactID,即存储这种多对一的映射关系,uxdb定义mXactCacheEnt来完成此工作。
multixact日志存储在uxdata/ux_multixactd/目录下,其中会有两个子目录members和offset,分别存储XactID成员和偏移量。从一个MultiXactID映射到具体的存储位置是通过下面的变换来完成的:
TODO
MultiXact日志的缓冲区用两个slru缓冲池来实现,分别是MultiXactOffsetCtl和MultiXactMemberCtl,分别记录Members和Offsets。在uxdb启动后,就注册在共享内存中,管理全局的MultiXactID。
MultiXact日志管理器主要操作
同CLOG日志管理器一样,MultiXact日志管理器的操作包括Multixact日志系

本文深入探讨了PostgreSQL中的MultiXact日志管理器,解释了MultiXactID的概念及其在并发控制中的作用。文章详细介绍了MultiXactID的创建、扩增过程,以及如何检测MultiXact是否在运行中。此外,还涵盖了MultiXact日志系统的启动、关闭和检查点操作。
最低0.47元/天 解锁文章
260

被折叠的 条评论
为什么被折叠?



