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