Sql 服务器页面结构。什么是 Fdata 长度?

Sql Server page structure. What is Fdata length?

我正在尝试了解 Sql 服务器数据页的结构。这是来自 Pro SQL Server Internals by Dmitri Korotkevitch 的截图 我创建了 3 个表:

  1. 1 INT 列
  2. 2 INT 列
  3. 4 INT 列

所有列都不是 NULL

那我运行

dbcc traceon(3604);
dbcc page
(
'DbName' 
,1 /*File ID*/
,368 /*Page ID*/
,3 /*Output mode: 3 - display page header and row details */
);

并获取以下 Fdata 长度值:

  1. 有 1 列 - 0800 = 0008 = 8 = 4 + 1x4
  2. 有 2 列 - 0c00 = 00c0 = 12 = 4 + 2x4
  3. 4 列 - 1400 = 0014 = 20 = 4 + 4x4

这里我列出了 "value in the output" = "swapped value" = "decimal value"

已编辑: 据我了解是Const_4 + Nbr_of_Columns * Size_Of_Columns。这是什么Const_4?

图中的

"Fdata length"是该行定长数据部分结束的偏移量。

在您的示例中,数据占用 4、8 和 16 个字节,并且该行以另外 4 个字节开始(1+1+2:状态位 A、状态位 B、Flength),因此 "end" 存储定长数据的(offset)分别为8、12、20。