DeepSeek总结PostgreSQL存储体系的核心单元——8KB大小的数据页
原文地址https://boringsql.com/posts/inside-the-8kb-page/文章解释了为什么是8KB、页的内部结构布局以及这些结构如何影响数据库的I/O、并发控制和清理机制。一、为什么是8KB历史渊源源自1980年代的伯克利POSTGRES项目当时选择8KB是为了匹配Unix系统的虚拟内存页4KB/8KB和磁盘扇区512字节实现高效对齐。现代权衡8KB是OLTP场景下的平衡点——太小会导致元数据开销占比过高太大会造成空间浪费和单次I/O读取过多无用数据如只读一行也要加载整个大块。对比分析型数据库如DuckDB使用更大的块如256KB以提升顺序扫描吞吐量。灵活性PostgreSQL支持在编译时通过--with-blocksize调整为1/2/4/8/16/32KB但默认8KB适用于绝大多数场景。二、页的内部结构Slotted Page 布局页采用“槽页”布局数据从两端向中间填充中间留出空闲空间页头Page Header24字节pd_lsn8字节最后修改该页的WAL日志序号用于崩溃恢复。pd_checksum2字节页数据校验和需启用。pd_flags2字节页状态标志如PD_ALL_VISIBLE页内所有行对所有事务可见是实现仅索引扫描的关键。pd_lower2字节行指针数组的结束偏移量指向空闲空间起点。pd_upper2字节元组数据的开始偏移量指向空闲空间终点。pd_special2字节特殊空间起始位置堆页为8192即无特殊空间索引页用于存储B-Tree元数据。pd_pagesize_version2字节页大小与版本。pd_prune_xid4字节用于页级剪枝允许查询在访问时就地清理死元组避免等待VACUUM。行指针Line Pointer4字节/个紧接页头向下增长相当于页的“目录”。结构lp_off元组偏移量、lp_flags状态未使用/正常/重定向/死亡、lp_len元组长度。作用索引指向的是页号行指针序号即ctid而非物理偏移。这使得页内碎片整理或HOT更新可以移动元组而索引无需变更。空闲空间位于pd_lower和pd_upper之间的区域。元组数据从页底向上增长包含元组头23字节 对齐填充 实际列数据。三、关键机制与观察容量估算每行开销 ≈ 4字节行指针 23字节元组头通常对齐到24字节 实际数据。示例表中平均每行约76字节单页可容纳约110-120行。多页扩展当数据超过单页容量PostgreSQL分配新页relpages增长。通过pageinspect可以查看每一页的填充情况如第一页只剩52字节空闲第二页只剩8字节。索引页的特殊空间堆页的pd_special8192无特殊空间。B-Tree索引页使用最后16字节存储兄弟页指针、树层级等元数据。四、使用pageinspect进行内部观察文章演示了如何通过pageinspect扩展直接查看页的原始内容page_header(get_raw_page(表, 0))解析页头信息LSN、lower/upper、特殊空间等。heap_page_items(get_raw_page(表, 0))列出页内所有行指针及对应元组长度、状态。bt_page_stats(索引, 1)查看索引页的统计信息类型、活动项、空闲大小等。五、总结页是I/O的原子单元读一行 加载整个8KB页到缓冲区。写一标志 重写整个页并记录WAL。可见性优化PD_ALL_VISIBLE标志使仅索引扫描得以跳过堆检查。轻量清理pd_prune_xid允许普通查询在访问页时触发页级剪枝回收空间。布局优势Slotted Page设计将固定大小的行指针与可变大小的元数据分离减少碎片便于管理。

相关新闻

快造Snapmaker下一款3D打印机也是多头?

快造Snapmaker下一款3D打印机也是多头?

近日,快造科技获得了一项名为“多色3D打印系统及其3D打印方法”的专利,申请号为PCT/CN2025/113434,国际公布日为2026年2月19日。从摘要内容来看,这项专利主要围绕多色打印时的供料与换料结构展开。系统包括:一台至少配…

2026/7/5 1:31:49 阅读更多 →
CentOS Stream 9服务器Docker部署KWDB:从零到跨模查询实战全记录

CentOS Stream 9服务器Docker部署KWDB:从零到跨模查询实战全记录

目录🚀 CentOS Stream 9服务器Docker部署KWDB:从零到跨模查询实战全记录🛠 一、环境准备1.1 检查 CentOS 系统版本1.2 检查 Docker 是否已安装1.3 检查端口是否被占用1.4 创建部署目录🚀 二、Docker 部署 KWDB2.1 拉取 KWDB 镜像2…

2026/7/5 22:47:27 阅读更多 →
Exploring Multimodal LMMs for Online Episodic Memory Question Answering on the Edge

Exploring Multimodal LMMs for Online Episodic Memory Question Answering on the Edge

Exploring Multimodal LMMs for Online Episodic Memory Question Answering on the Edge Authors: Giuseppe Lando, Rosario Forte, Antonino Furnari Deep-Dive Summary: 探索用于边缘端在线情景记忆问答的多模态大语言模型 作者: Giuseppe Lando, Rosario Fo…

2026/5/17 7:01:43 阅读更多 →

最新新闻

实战解析:高效构建Suno AI音乐生成API的完整指南

实战解析:高效构建Suno AI音乐生成API的完整指南

实战解析:高效构建Suno AI音乐生成API的完整指南 【免费下载链接】Suno-API Create Music in Seconds with SunoAPI. 项目地址: https://gitcode.com/GitHub_Trending/su/Suno-API Suno-API是一个基于Python和FastAPI的非官方音乐生成API服务,专…

2026/7/6 18:40:19 阅读更多 →
Docker Compose部署docker-http-https-echo最佳实践:完整配置指南

Docker Compose部署docker-http-https-echo最佳实践:完整配置指南

Docker Compose部署docker-http-https-echo最佳实践:完整配置指南 【免费下载链接】docker-http-https-echo Docker image that echoes request data as JSON; listens on HTTP/S, useful for debugging. 项目地址: https://gitcode.com/gh_mirrors/do/docker-htt…

2026/7/6 18:38:17 阅读更多 →
Docker管理新革命:Dockge可视化容器编排完整指南

Docker管理新革命:Dockge可视化容器编排完整指南

Docker管理新革命:Dockge可视化容器编排完整指南 【免费下载链接】dockge A fancy, easy-to-use and reactive self-hosted docker compose.yaml stack-oriented manager 项目地址: https://gitcode.com/GitHub_Trending/do/dockge 厌倦了复杂的Docker命令行…

2026/7/6 18:36:14 阅读更多 →
终极指南:如何用Serial-Studio让串行数据“开口说话“?[特殊字符]

终极指南:如何用Serial-Studio让串行数据“开口说话“?[特殊字符]

终极指南:如何用Serial-Studio让串行数据"开口说话"?🚀 【免费下载链接】Serial-Studio Open-source telemetry dashboard. Supports UART, BLE, MQTT, Modbus, CAN Bus and more. 项目地址: https://gitcode.com/GitHub_Trendi…

2026/7/6 18:36:14 阅读更多 →
【Java毕业设计】基于 SpringBoot 的大学生运动会报名成绩管理系统的设计与实现 基于前后端分离的高校体育赛事组织管理系统(源码+文档+远程调试,全bao定制等)

【Java毕业设计】基于 SpringBoot 的大学生运动会报名成绩管理系统的设计与实现 基于前后端分离的高校体育赛事组织管理系统(源码+文档+远程调试,全bao定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/6 18:34:13 阅读更多 →
Halcon 像素当量标定:5个常见误区与3步精度验证方案

Halcon 像素当量标定:5个常见误区与3步精度验证方案

Halcon 像素当量标定:5个常见误区与3步精度验证方案在工业视觉检测项目中,像素当量标定的准确性直接影响着尺寸测量的精度。许多工程师完成标定后,常对结果可靠性存疑——标定板倾斜5会带来多大误差?标定参数在不同位置能否保持一…

2026/7/6 18:32:10 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻