pg_multixact管理器是一个类似于pg_xact的管理器,它为每个MultiXactId存储一个MultiXactMember数组。它是共享行锁实现的基本部分。每个MultiXactMember由一个TransactionId和一组标志位组成。这个名字有点历史:最初,一个MultiXactId由多个TransactionId组成(除了极少数情况外),因此“multi”。然而,现在使用只包含单个Xid的MultiXactIds是完全合法的。
标志位的含义对于本模块是不透明的,但它们主要用于heapam.c中,以标识每个成员事务在任何给定元组上持有的锁模式。此模块仅包含对存储和检索数组的支持。
我们使用两个SLRU区域,一个用于存储每个MultiXactId的数据开始偏移量,另一个用于保存偏移量。这个技巧允许我们存储TransactionID的可变长度数组。(我们也可以使用一个包含计数和TransactionID的区域,有效的MultiXactId值指向包含计数的