不知道如何正確調用標題。但是,我試圖瞭解數據頁面的存儲方式。我創建了簡單的表:SQL Server數據頁中缺少字節
CREATE TABLE testFix
(
id INT,
v CHAR(10)
);
INSERT INTO dbo.testFix
(
id,
v
)
VALUES
( 1, -- id - int
'asdasd' -- v - varchar(100)
)
GO 2
DBCC TRACEON(3604);
然後我PageFID和PagePID通過以下命令:
DBCC IND(tempdb, testFix, -1)
GO
然後實際的數據頁:
DBCC PAGE (tempdb, 1, 368, 3)
所以,現在我明白了:
插槽0偏移量0x60長度21
記錄類型= PRIMARY_RECORD記錄屬性= NULL_BITMAP
記錄大小= 21存儲器轉儲@ 0x000000287DD7A060
0000000000000000:10001200 01000000 61736461 73642020 20200200 ........ asdasd .. 0000000000000014 :00
。插槽0列1偏移爲0x4長度4長度(物理)4
ID = 1
時隙0列2偏移0x8中長度10長度(物理)10
V = asdasd
插槽1偏移量0x75長度21
記錄類型= PRIMARY_RECORD記錄屬性= NULL_BITMAP
記錄大小= 21存儲器轉儲@ 0x000000287DD7A075
0000000000000000:10001200 01000000 61736461 73642020 20200200 ........ asdasd .. 0000000000000014:00
。插槽1第1列偏移爲0x4長度4長度(物理)4
ID = 1
插槽1欄第2偏移0x8中長度10長度(物理)10
V = asdasd
時隙2偏移量0x8a長度21
記錄類型= PRIMARY_RECORD記錄屬性= NULL_BITMAP
記錄大小= 21存儲器轉儲@ 0x000000287DD7A08A
0000000000000000:10001200 01000000 61736461 73642020 20200200 ........ asdasd ..0000000000000014:00
所以記錄的長度是21字節。但是INT是4個字節而CHAR(10)是10個字節。 4 + 10 = 14。對於其他7個字節使用什麼?
[元數據](http://aboutsqlserver.com/2013/10/15/sql-server-storage-engine-data -pages和 - 數據 - 行/)。兩個標籤字節,數據長度兩個字節,列數兩個字節,空位圖一個字節。 –
https://dba.stackexchange.com/questions/127405/sum-of-datalengths-not-matching-table-size-from-sys-allocation-units – dbajtr