2017-07-18 80 views
0

不知道如何正確調用標題。但是,我試圖瞭解數據頁面的存儲方式。我創建了簡單的表: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個字節使用什麼?

+1

[元數據](http://aboutsqlserver.com/2013/10/15/sql-server-storage-engine-data -pages和 - 數據 - 行/)。兩個標籤字節,數據長度兩個字節,列數兩個字節,空位圖一個字節。 –

+0

https://dba.stackexchange.com/questions/127405/sum-of-datalengths-not-matching-table-size-from-sys-allocation-units – dbajtr

回答