2017-07-18 4 views
0

Je ne savais pas comment appeler correctement le titre. Cependant, j'essaie de comprendre comment les pages de données sont stockées. J'ai créé la table simple:Octets manquants dans la page de données 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); 

Je suis PageFID et PagePID par commande suivante:

DBCC IND(tempdb, testFix, -1) 
GO 

Ensuite, les pages de données réelles:

DBCC PAGE (tempdb, 1, 368, 3) 

Alors maintenant, je vois:

Emplacement 0 Décalage 0x60 Longueur 21

Type d'enregistrement = PRIMARY_RECORD Attributs = NULL_BITMAP enregistrement
enregistrement Taille = 21

Dump mémoire @ 0x000000287DD7A060

0000000000000000: 10001200 01000000 61736461 73642020 20200200 ........ asdasd .. 0000000000000014 : 00
.

emplacement 0 Colonne 1 Offset 0x4 Longueur 4 Longueur (physique) 4

id = 1

emplacement 0 Colonne 2 Offset 0x8 Longueur 10 Longueur (physique) 10

v = asdasd

slot 1 Décalage 0x75 Longueur 21

type d'enregistrement = PRIMARY_RECORD Attributs = NULL_BITMAP enregistrement
enregistrement Taille = 21

Dump mémoire @ 0x000000287DD7A075

0000000000000000: 10001200 01000000 61736461 73642020 20200200 ........ asdasd .. 0000000000000014: 00
.

Slot 1 Colonne 1 Offset 0x4 Longueur 4 Longueur (physique) 4

id = 1

Slot 1 Colonne 2 Offset 0x8 Longueur 10 Longueur (physique) 10

v = asdasd

slot 2 Décalage 0x8A Longueur 21

type d'enregistrement = PRIMARY_RECORD Attributs = NULL_BITMAP enregistrement
enregistrement Taille = 21

Memory Dump @ 0x000000287DD7A08A

0000000000000000: 10001200 01000000 61736461 73642020 20200200 ........ asdasd ..0000000000000014: 00

La longueur de l'enregistrement est donc de 21 octets. Cependant INT est de 4 octets et CHAR (10) est de 10 octets. 4 + 10 = 14. Que pour les 7 autres octets sont utilisés?

+1

[métadonnées] (http://aboutsqlserver.com/2013/10/15/sql-server-storage-engine-data -pages-et-data-rows /). Deux octets de balise, deux octets pour la longueur des données, deux octets pour le nombre de colonnes, un octet pour le bitmap nul. –

+0

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

Répondre