本附录汇总 pgrac 手册全 12 章及 14 个深度页中出现的核心术语与缩写,按功能域分为 6 节。每条术语给出缩写展开(如有)、1-2 句定义,以及指向对应深度页或章节的交叉引用。附录不重复各章节的概念推导,仅作为快速查阅的词汇基准。
集群拓扑与基础设施层的核心术语,覆盖节点、进程、心跳与隔离机制。
postmaster — PostgreSQL 主监控进程,pgrac 集群模式下额外负责注册到 GRD、fork 集群 daemon(LMS / LMD / LCK / LMON 等),以及在子进程死亡时做 restart / instance crash 决策。参见 Chapter 8。
instance — 运行在单个节点上的 pgrac 进程组的总称。每个 instance 拥有独立的 buffer pool、独立的 undo tablespace(undo_node_N)和独立的 WAL stream(pg_wal_node_N/)。
node — 运行 instance 的物理或虚拟主机。节点通过高速 Interconnect(RDMA / RoCE / TCP)相互通信,并共享底层存储。
voting disk — 存放在共享存储上的仲裁文件,用于在网络分裂(split-brain)时决定哪一侧继续服务。投票基于过半节点可达性,故障节点 STONITH(shoot the other node in the head)后被 fence。
fencing — 隔离失效节点的机制,防止脑裂节点继续修改共享存储。pgrac 支持 STONITH 硬隔离(IPMI / BMC 断电)和 IO fencing(吊销存储访问凭据)两种模式。
CSSD (Cluster Synchronization Services Daemon) — 集群同步服务守护进程,负责管理节点成员关系、维护 voting disk 租约,并在节点超时(默认 6 秒心跳超时)后触发 fence 决策。
three-way heartbeat — pgrac 三路心跳机制:节点间 Interconnect 心跳(1 s)+ 共享存储 I/O 心跳(3 s)+ CSS voting disk 租约(6 s)。任意一路失联的阈值不同,触发 SUSPECT → DEAD 的状态机由 LMON 协调。参见 Chapter 7。
DRM (Dynamic Resource Mastering) — GRD 的热点迁移机制,把频繁访问的 resource 的 master 节点迁移到最活跃的访问方,减少跨节点消息轮次。GCS 和 GES 均可触发 DRM。详见 grd-master。
Cache Fusion 与跨节点锁协议层的核心术语,覆盖 GCS、GES、GRD 与 PCM 锁状态机。
Cache Fusion — pgrac 的跨节点 buffer 传输协议:当节点 B 请求一个 block 且节点 A 的 buffer pool 已持有它时,block 直接从 A 的内存通过 Interconnect 传到 B 的内存,绕过磁盘(Tier 1 RDMA 目标延迟 ~5 μs)。详见 cache-fusion。
GCS (Global Cache Service) — Cache Fusion 的上层服务,管理所有跨节点 buffer block 的访问权限、传输协调和 PI 生命周期。GCS 资源记录挂在 GRD 上,key 为 BufferTag(文件号 + 块号)。
GES (Global Enqueue Service) — 全局 enqueue 锁服务,管理 buffer cache 之外的所有跨节点逻辑锁:行锁(TX)、表锁(TM)、序列锁(SEQ)、Advisory 锁(UL)等。GES 与 PCM 共用 GRD master 路由,但 keyspace 完全隔离。详见 ges。
GRD (Global Resource Directory) — 跨节点资源元数据字典,按 hash(resource_id) % N 分片到各节点,每个 resource 有唯一 master 节点。GCS(buffer block 资源)和 GES(enqueue 锁资源)的元数据都挂在 GRD 上。详见 grd-master。
master — GRD 中某个 resource 的权威节点,负责维护该资源的 grant_list(持有者队列)和 convert_queue(等待者队列),并协调锁转换消息的收发。master 由 hash(key) % N 静态决定,可通过 DRM 动态迁移。
BAST (Blocking ASynchronous Trap) — GES 异步阻塞通知:当 master 发现锁请求与当前持有者冲突时,向持有者发送 BAST 消息,请求其主动释放或降级。BAST 是协作式释放机制,区别于 PCM 的同步强制降级(PCM downgrade 是立即响应)。详见 ges。
PCM lock (Parallel Cache Management lock) — buffer block 三态锁(N / S / X)加 has_pi 正交标志。N = 无持有;S = 共享读(多节点可同时持有);X = 独占写(全集群唯一)。has_pi 标志正交于锁状态,表示本节点保留了一份 PI(Past Image)副本。详见 pcm-lock。
PI (Past Image) — 持有 X 锁的节点在将 block 传出(X → S downgrade)时,若该 block 是脏 block,本节点保留的旧脏副本。PI 为后续一致性读提供兜底,在对应 WAL 已 fsync 或 reconfiguration 完成后由 GRD 协调注销。参见 Chapter 2 和 cache-fusion。
XCUR (Exclusive Current) — buffer 副本类型:持有 PCM X 锁的节点上的 current block,全集群唯一。读写均在 XCUR 节点进行;其他节点发出 block 请求时触发 Cache Fusion 传输。
SCUR (Shared Current) — buffer 副本类型:持有 PCM S 锁的节点上的 current block,多节点可同时持有(只读共享)。
CR (Consistent Read) — 一致性读视图,在 AD-006 PIVOT B 后不再占用独立 buffer 槽,而是通过 undo chain 对 current block 按需构造历史行级版本。CR 完全本地,不进 GRD,不跨节点传输。参见 Chapter 11。
SCN 时序协议与崩溃恢复相关的核心术语,覆盖 Lamport 时钟、WAL 合并与重构 (reconfiguration) 流程。
SCN (System Change Number) — pgrac 的分布式 Lamport 时钟,64 bit 编码(高 8 位 node_id + 低 56 位 local_scn)。每次事务提交递增,作为 MVCC 可见性基准、WAL record 全局时戳,以及 Cache Fusion 和 GES 消息因果排序的依据。详见 scn 和 Chapter 4。
BOC (Broadcast on Commit) — 提交时广播机制:事务提交后,walwriter 内嵌的 BOC 模块每 100 μs 周期地把最新 commit_scn piggyback 到所有节点,使全集群 SCN 持续收敛。BOC 是 SCN 传播的主动推送路径,补充 piggyback 被动路径。
piggyback — 在任意跨节点消息(PCM grant、CF block transfer、GES grant、BOC 广播)中附带当前 SCN 的机制。收到 piggyback 时,接收方执行 local_scn = max(local_scn, remote.local_scn) + 1,确保因果单调性。
Lamport timestamp — pgrac SCN 的理论基础:Lamport 逻辑时钟。三条推进路径:本地提交递增、收到外部 SCN 取 max+1、WAL 写入时快照当前值。参见 Chapter 4。
merged recovery — 崩溃恢复时把多个节点的 per-instance WAL stream 按 xl_scn 升序合并回放(K-way priority queue merge)的机制。每条 WAL record 携带 xl_scn,merged order 与原始写入因果顺序一致。参见 Chapter 5 和 Chapter 12。
freeze / rebuild / thaw — reconfiguration 的三阶段协议:Freeze 冻结所有节点的 DML,阻止新的资源访问;Rebuild 重建 GRD(清理死亡节点的 GCS/GES 记录,选举新 master,整合 PI 信息);Thaw 解冻,集群恢复正常服务。详见 reconfiguration 和 Chapter 5。
xl_scn — WAL record header 的扩展字段(8 B),存储该 record 写入时刻的 SCN(commit record 存 commit_scn,其他 record 存 local_scn)。用于 merged recovery 的全局排序,以及崩溃后 per-thread WAL stream 的 SCN 单调验证。参见 Chapter 12。
thread_id — WAL page header 字段(xlp_thread_id,2 B),标识该 WAL page 所属的 per-instance redo stream。recovery 时从 page header 读取,无需在每条 record header 中冗余存储。参见 Chapter 12。
块格式与 undo 子系统的核心术语,覆盖 ITL、UBA、TT slot、per-instance undo 与 delayed cleanout。
ITL (Interested Transaction List) — block 末端(special area)的事务标记 slot 数组。每个 slot 48 B:xid(4 B)+ wrap(2 B)+ flags(1 B)+ lock_count(1 B)+ UBA(16 B)+ commit_scn(8 B)+ write_scn(8 B)+ first_change_lsn(8 B)。默认 INITRANS = 8(共 384 B),通过 PD_HAS_ITL flag 标识。详见 block-format 和 Chapter 9。
INITRANS — per-table DDL 参数,控制 block special area 中 ITL slot 的初始数量(默认 8)。高并发热表可调至 16–32,OLAP 读多写少表可调至 4。INITRANS = 8 导致每块约 4.8% 容量损失(384 B / 8192 B)。参见 Chapter 9。
UBA (Undo Block Address) — ITL slot 中 undo_segment_head 字段的类型,16 B 精确寻址结构:segment_id(4 B)+ block_no(4 B)+ tt_slot_offset(2 B)+ row_offset(2 B)+ reserved(4 B)。同时服务两条查询路径:TT slot 查询(获取 commit_scn)和 undo record 查询(CR block 构造)。详见 per-instance-undo 和 Chapter 9。
TT slot (Transaction Table slot) — per-instance undo segment header 内的事务状态表条目,32 B:xid(4 B)+ wrap(2 B)+ status(1 B)+ flags(1 B)+ commit_scn(8 B)+ first_undo_block(16 B UBA)。是 SCN 路径可见性判断的权威数据源。每个 segment header 含 48 个 TT slot(1.5 KB)。详见 per-instance-undo 和 Chapter 10。
per-instance undo tablespace — 每个 pgrac 节点拥有的独立 undo 存储区(undo_node_N),默认 16 个 segment × 64 MB = 1 GB。每实例只写自己的 undo,跨节点读 undo 通过 Cache Fusion(S 模式)只读访问,实现零跨节点 undo 写争用。详见 per-instance-undo 和 Chapter 10。
delayed cleanout — commit 时不立即遍历所有已修改行更新 ITL slot flags 的优化。commit 只更新 TT slot(status → COMMITTED),block 设置 PD_DELAYED_CLEANOUT flag;下次有事务对该 block 请求 S → X 升级或 SCN 路径顺手查询时,才执行实际 cleanout,将 commit_scn 写回 ITL slot。高并发批量写入时可减少 commit 路径 I/O 70-90%。参见 Chapter 9。
pd_block_scn — pgrac 在 PageHeaderData 末端追加的 8 B 字段,记录该 block 最近一次修改时刻的 SCN。读路径通过比对 block_scn 与 snapshot.read_scn 判断是否需要构造 CR 视图;若 block_scn ≤ read_scn,则 current 版本直接可见,无需 undo 回溯。参见 Chapter 9。
undo retention — undo 数据的最短保留时长(默认 cluster_undo_retention_sec = 900 秒,15 分钟)。在此窗口内,即使 segment 已 COMMITTED,undo records 也不可回收(防止长查询出现 "snapshot too old" 错误,即 STO)。后台 undo_vacuum worker 每 60 秒扫描回收过期数据。参见 Chapter 10。
锁协议与并发控制层的核心术语,覆盖 grant_list、convert queue、死锁检测与写前规则。
grant_list — GES / GRD master 维护的锁持有者链表,记录已授予该 resource 的全部 lock holder(节点 ID + 锁模式)。新请求到达时,master 检查 grant_list 中是否存在冲突;无冲突则直接加入,有冲突则进入 convert_queue。
convert queue — GES master 维护的等待队列,存放因与 grant_list 中已有持有者冲突而无法立即授予的锁请求。队列按 FIFO 排序,支持三级优先级(DDL > DML > Advisory)。参见 ges。
deadlock probe — pgrac 死锁检测机制:当 LMD 发现 wait-for graph 中存在环路时,选择代价最小的事务(通常是最年轻的事务)为牺牲者并中止,打断环路。LMD 每个节点构造本地 wait-for graph 片段,跨节点合并由 LMON 协调。参见 Chapter 6。
write-ahead rule (Cache Fusion) — Cache Fusion 传输脏 block 之前,对应的 WAL 记录必须已 fsync 的约束(feature-019)。确保接收方即使崩溃,仍可从日志恢复 block,而不依赖传出方(传出方可能也已崩溃)。违反此规则会破坏集群持久性保证。参见 Chapter 12。
WRAP counter — TT slot 和 ITL slot 中的 wrap 字段(2 B),slot 复用时递增,防止 ABA 误判:reader 通过比对 wrap 值确认 slot 未被复用,若不匹配则改用 ITL slot 缓存的 commit_scn。
convert queue priority — GES 等待队列的优先级机制:DDL 操作(AccessExclusive)优先级最高,普通 DML(RowExclusive)次之,Advisory 锁最低。高优先级请求可插队低优先级持有者后面,但不违反 FIFO 对同优先级请求的保证。
S → X upgrade (cleanout 触发) — delayed cleanout 时,reader 发现 block 的 PD_DELAYED_CLEANOUT flag 已设置,需要将 commit_scn 写回 ITL slot。写 block 必须短暂升级 PCM 锁(S → X),完成 cleanout 后立即降回 S,期间其他 reader 等待。该升级必须同时产生对应 WAL(ItlCleanoutRecord)。参见 Chapter 9。
后台进程与 wait event 监控的核心术语,覆盖 LMS、LMD、LMHB、DIAG 等集群 daemon。
LMS (Lock Master Service worker) — pgrac 核心 cluster daemon,处理跨节点 PCM/GES 远程请求、响应 buffer ship(Cache Fusion 发送路径)、执行锁授予 / 撤销决策,并在每条响应消息中附带 SCN piggyback。默认 4 个 worker(GUC cluster.lms_workers,可调 1–16)。详见 background-processes。
LMD (Lock Manager Daemon) — 接收本节点 enqueue 请求,维护 wait queue(FIFO + 3 级优先级),构造本地 wait-for graph 片段供死锁检测,并在 LMON 协调下与其他节点合并全局 graph。每节点 1 个。详见 background-processes。
LMHB (Lock Manager HeartBeat) — 监控 LMS / LMD 等锁服务进程的心跳守护:若锁服务进程超时未响应,LMHB 触发 panic,由 postmaster 决策 restart 或 instance crash(保护集群一致性优于保留单节点可用性)。
DIAG — 跨节点诊断快照进程:检测 long-wait(默认 60 秒)触发 hang dump,接收其他节点的诊断请求,聚合 cluster log。集群挂起排查的第一入口。详见 background-processes。
RECO (Distributed Recovery process) — 处理跨节点分布式事务(2PC)残留的 in-doubt 事务回收进程;在 pgrac 中职责扩展为清理 reconfig 期间遗留的孤立锁记录和 PI 残留。每节点 1 个,常驻但通常空闲。
GRD0 — GRD(Global Resource Directory)主进程,负责本节点 GRD 分片的元数据持久化和跨节点 GRD 同步协议的协调端点。GRD0 在 Freeze / Rebuild / Thaw 三阶段中承担 Rebuild 的核心工作量。
walwriter + BOC — PG 原生 walwriter 进程在 pgrac 中额外内嵌 BOC(Broadcast on Commit)模块:每 100 μs 周期 flush WAL,并将最新 commit_scn piggyback 到所有节点。BOC 与 WAL 落盘时序强耦合,内嵌保持时序一致性(对齐 Oracle LGWR 内嵌 BOC 的架构决策)。参见 Chapter 4 和 Chapter 8。
LCK (Lock Process) — 持有 instance-level 锁(dictionary lock、cluster catalog lock)的专用进程,避免 LMS worker 在处理高频 block 请求时被 instance-level 锁长期阻塞。每节点 1 个。
LMON (Lock Monitor) — 监控集群节点状态、协调 reconfiguration、触发 GRD 重建和 fence 决策,并在需要 merged recovery 时启动 Recovery Coordinator。是集群健康状态的全局协调者。详见 reconfiguration。
本附录与以下深度页及章节紧密关联,建议配合查阅:
Tier S(核心协议)
xl_scn 单调不变式、持久化防倒退hash(key) % N 分片、DRM 热点迁移、Freeze/Rebuild/Thaw 三阶段 GRD 重建Tier A(存储与锁服务)
pcm_lock 获取顺序约束ClusterPageHeader C struct、ITL slot 48 B 字段注释、PD_HAS_ITL / PD_DELAYED_CLEANOUT flag 语义UndoSegmentHeader struct、TT slot 32 B 编码、5 态 segment 生命周期、undo_vacuum bgworkerClusterBufferDesc 128 B layout、三池差异化驱逐、PIVOT B cache-line 对齐策略、PI TTLTier B(运维与可观测)
ClusterXLogRecord 32 B header、7-8 个新 RMGR、K-way SCN merge replay 算法、WAL 容量预算(5.5× baseline)pg_stat_cluster_activity 视图、long-wait 阈值与 DIAG 触发以下设计文档是本手册各章节的规范来源,适合需要深入了解协议细节、形式证明或实现约束的读者: