TGViewer
开发者工具箱|编程·开发工具·资源 开发者工具箱|编程·开发工具·资源 @devtoolboxhub · 779 subscribers
Post #1412 12
B-tree 页面分裂对 PostgreSQL 的影响

通过 pageinspect 和 pgstattuple 两个内置扩展,可以直接观察 B-tree 索引从单页生长到多层树的完整过程,并量化每次页面分裂带来的 WAL 生成和缓冲区访问开销。

实验用 EXPLAIN (analyze, buffers, wal) 配合两个扩展,逐行插入随机 UUID 并收集统计信息。关键发现:
• 前 291 行全部写入单个页面(根页即叶页),每次插入仅 2 条 WAL 记录、2 个共享缓冲区。
• 第 292 行触发首次分裂:生成新根页,树升到 1 层,WAL 变为 3 条、缓冲区 3 个。
• 后续叶页分裂使 WAL 增加到 3 条,分支页分裂则达 4 条,缓冲区也相应增加(层数越多缓冲越多)。
• 当根页下指 291 个叶页时根页满,树升至 2 层(第 61346 行),此时插入需 4 条 WAL、4 个缓冲区。
• 继续增长直到索引超过 417 MB、53193 个叶页时,根页再次分裂,树升到 3 层。


即使大型索引深度通常也只有 2–3 层,内部页面数量少、易缓存,查询 I/O 瓶颈更多在堆页面而非 B-tree 遍历。

GitHub

#开发者 #工具 #PostgreSQL #Btree #页面分裂 #WAL #pageinspect #pgstattuple #FranckPachot
@DevToolboxHub
More from @devtoolboxhub
  1. Sep 29, 2026Python 虚拟环境其实是个软链接 在 Linux 和 macOS 上执行 python3 -m venv .venv,并不会复制一份 Python。venv 里的 python…
  2. Sep 29, 2026Will It Focus:相机自动对焦兼容性查询 Agent 这是一个面向摄影器材的自动对焦兼容性查询工具,但它真正的看点在于工程实现:如何让模型引用厂商原文时,保证引用的确实是…
  3. Sep 28, 2026Agent 运营站点实测:125 次曝光零点击 这是一个由 agent 负责写作、部署和测量的站点,人类只做审批。第二期实测记录披露了一组数据:查询词 git undo last…
  4. Sep 28, 2026SaveNowX 无落盘下载 X 视频的架构设计 SaveNowX 是一个免费工具,把公开的 X(Twitter)帖子解析成可下载的视频,无需账号、无水印、不留历史记录。作者在开发…
  5. Sep 28, 2026GitHub 的 pull_request_target 改动会破坏什么 GitHub 今年调整了 pull_request_target 的运作方式,两项带日期的变更会影响所有使…
  6. Sep 27, 2026Instagram 字体生成器:把普通文字换成 Unicode 样式 Instagram 字体生成器是一类在线工具,把普通字母转换成外观不同的 Unicode 字符,再复制粘贴到…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →