我看到了SQL Server中的8KB (8192 = 96头+ 36行偏移+ 8060空闲空间)页面体系结构。当涉及到在页面中存储数据记录时,我感到困惑。
在下表中,我已经为列ID创建了Integer,它应该采用4字节,但是DBCC页面命令11 Bytes中显示了每个记录大小/长度。
我创建了一个简单的表如下:
CREATE TABLE PAGETEST
(
ID int primary key
)
GO
INSERT INTO PAGETEST values (200) Q1)。为什么一个简单的整数数据占用4个实际字节的数据+7字节额外= 11字节。
Q2)。有人能解释一下一张唱片是怎么在一页里存储的吗?
请查阅以下图片:

发布于 2017-04-21 16:20:26
要记住的一件重要事情是,行存储表的最小行大小为9字节。您可以在答案和注释这里中看到有关这方面的一些细节。如果要创建示例数据并在页面中进行挖掘,我建议至少创建几个列,以使您所看到的内容更加清晰。否则,您可能会遇到这样一种情况,即具有单个TINYINT列的表所占用的空间似乎与具有单个SMALLINT的表占用的空间相同,这在一开始是没有意义的。
CREATE TABLE dbo.X_TINYINT (ID SMALLINT NOT NULL);
CREATE TABLE dbo.X_SMALLINT (ID SMALLINT NOT NULL);
INSERT INTO dbo.X_TINYINT WITH (TABLOCK)
SELECT TOP (100000) 0
FROM master..spt_values t1
CROSS JOIN master..spt_values t2
OPTION (MAXDOP 1);
INSERT INTO dbo.X_SMALLINT WITH (TABLOCK)
SELECT * FROM dbo.X_TINYINT;
sp_spaceused 'X_TINYINT'; -- 1096 KB reserved
sp_spaceused 'X_SMALLINT'; -- 1096 KB reserved发布于 2017-04-21 13:22:29
正如@sabin所提到的,这一点在本文中得到了更好的解释。https://www.sqlskills.com/blogs/paul/inside-the-storage-engine-anatomy-of-a-record/
在页面转储中,如果查看c8的十六进制值,结果是小数为200。这是您插入的数据。
c8000000需要4个字节,这是固定长度的数据。在保罗的博客文章中解释了固定长度数据前后的4 (1000800)和3 (01000)字节。
https://dba.stackexchange.com/questions/171601
复制相似问题