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 = 21Dump 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 = 21Dump 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 = 21Memory 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?
[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. –
https://dba.stackexchange.com/questions/127405/sum-of-datalengths-not-matching-table-size-from-sys-allocation-units – dbajtr