土法炼钢兴趣小组的算法知识备份

【WiredTiger 内核】Block manager、页格式与压缩

文章导航

分类入口
databasestorage
标签入口
#wiredtiger#block-manager#page-format#compression#extent-list#address-cookie#checkpoint#mongodb

目录

第 6、9 篇 产出 on-disk page image 之后,真正决定「写到文件哪里、如何校验、如何按 checkpoint 回收」的是 Block Manager。Architecture Guide Block Manager:子系统负责磁盘读写,目标是高性能、省空间与可定制。

本文钉住:块与 address cookie、无覆盖分配、descriptor、extent list、与 checkpoint/eviction 的写出路径。压缩算法细节不做手册式罗列(系列边界)。

本文是「WiredTiger 内核」系列第 12 篇(共 17 篇)。→ 系列目录

先修:第 6、9 篇。续读:第 13 篇 Compaction / Backup。

版本锚定:Architecture Guide Version 12.0.0 / develop Block Manager;源码 mongodb-8.0src/block/src/include/block.h


一、什么是 block

写出后返回 address cookie(对上层不透明),存在对应 WT_REFaddr 上。Cookie 含:offset(按 allocation_size 缩放)、可选 object_id(tiered storage)、size(同样缩放)、checksum。

Block header 字段(size、checksum、flags、padding)用于校验与 salvage;page header 见 btmem.h,本篇不逐字段抄写。


二、分配策略与 descriptor

模式 行为
Best fit(默认) 在按 size 排序的 avail extent skiplist 上找精确或下一更大空闲段,减少碎片
First fit 放进第一个可用 extent;所有 root 页用 first fit;compaction 期间也切到 first fit(第 13 篇)

文件第一块descriptor block:含 WT 主/次版本、checksum、magic——用于确认「这是兼容版本的 WT 数据文件」且整文件未彻底损坏。


三、Extent list 与 Checkpoint

每个 checkpoint 维护三张 extent list(WT_EXTLIST):

列表 含义
alloc 本 checkpoint 新分配的文件区间
avail 未使用、可分配
discard 本 checkpoint 释放的区间

Avail 额外按 size 建 skiplist 以加速分配。Checkpoint 删除/合并时:若某块同时出现在某代的 alloc 与更后代的 discard,则可进入 avail(Guide 用多代 checkpoint 例子说明合并;读原文 Checkpoint deletion and merging)。

写出后的 checkpoint cookie(不透明字节串)含:root / alloc list / avail list / discard list 的 address cookie,以及文件大小与 checkpoint 数据大小等。可用 tools/wt_ckpt_decode.py 解码(Guide)。

典型文件保留至少两个 checkpoint;打开时读最新。Checkpoint 按深度优先:先 leaf 块,再 parent(parent 需持有 leaf 地址)。bm->write 不保证立刻 durable;checkpoint 路径在全部写出后还会 bm->sync。Eviction 调用 bm->write要求 sync(耐久仍靠后续 checkpoint / journal,第 9–10 篇)。


四、Checksum 与压缩入口


五、收束

  1. Block = 无覆盖写入的磁盘页单元;WT_REF 用 address cookie 寻址。
  2. Checkpoint 用 alloc/avail/discard 管理空间;旧 checkpoint 删除后块才真正可复用。
  3. 下一篇:Compaction 与 Backup——文件为何删了数据还不缩小、备份期间日志为何不删。

参考资料


上一篇Rollback to Stable
下一篇Compaction 与 Backup

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-07-22 · database / storage

【WiredTiger 内核】Reconciliation:内存页到 on-disk image

拆解 WiredTiger reconciliation:把 in-memory 页转为 on-disk image、按 leaf_page_max 与 split_pct 分裂,并在用户表 reconcile 时选出最新已提交值、将更旧更新写入 History Store;锚定 wiki 与 src/reconcile/。

2026-07-22 · database / storage

【WiredTiger 内核】Checkpoint:跨文件一致快照

拆解 WiredTiger checkpoint 算法:先借 eviction 减压,再按用户表→History Store→元数据顺序 reconcile 并原子切换;说明 checkpoint generation 与 eviction 的可见性约束,以及与 journal 的耐久分工。


By .