

新闻资讯
技术学院SQL Server数据页是8KB最小I/O单位,含页头(96字节,含Page ID、m_type等元数据)、行数据(分固定/变长字段、NULL位图)和行偏移数组(页尾2字节/槽,支持O(1)行定位)。
SQL Server 的数据页是存储数据的最小 I/O 单位(默认 8KB),理解其内部结构对性能调优、故障排查和数据恢复至关重要。页中不仅存着用户数据行,还包含页头、行偏移数组、空闲空间等元信息。行格式则决定了每行数据如何组织、是否压缩、是否有变长字段等。
每个数据页开头固定 96 字节(SQL Server 2005+ 实际为 96 字节,常被简称为“80 字节页头”,但含扩展字段),存放页级元数据。关键字段包括:
可通过 DBCC PAGE 命令查看原始页头内容,例如:DBCC PAGE('YourDB', 1, 123, 3) 中的 type=3 输出即包含完整页头解析。
SQL Server 支持两种主要行格式:普通行(Regular Row)和行溢出/大对象处理机制。是否启用 ROW_OVERFLOW_DATA 或 LOB_DATA 分配取决于列定义和实际长度。
当一行总长度 > 8060 字节(不含 LOB 列本身),SQL Server 会将部分变长列自动推至行溢出页(Row-Overflow Page),原位置仅保留 24 字节指针。
页末尾从后往前生长一个数组,每个条目占 2 字节,记录本页中第 n 行的起始偏移量(距页首地址)。例如 slot 0 对应第一行在页内的起始地址,slot 1 对应第二行……数组大小 = m_slotCnt × 2。
这个数组让 SQL Server 能 O(1) 定位任意行,也是 DBCC PAGE 中 “OFFSET TABLE:” 区域的来源。
多数业务场景无
需直接操作页结构,但在以下情况值得深入:
掌握页头与行格式不是为了日常开发,而是构建对 SQL Server 存储引擎的直觉——知道数据真正在磁盘上怎么躺,才能更准地判断它为什么会慢、为什么会坏。