2. Edition 2012 – 10 et 11 décembre
Sponsors Platinum
SQL SERVER : STOCKAGE INTERNE
11 décembre 2012
3. Edition 2012 – 10 et 11 décembre
SOMMAIRE
David Barbarin
~10 ans expérience SQL Server
Insentia SA
Blog : http://blog.developpez.com/mikedavem/
Twitter : @mikedavem
Conseil et formation
oArchitecture système et Bases de Données
oHaute disponibilité
oPerformance et optimisation
oSécurité
4. Edition 2012 – 10 et 11 décembre
SOMMAIRE
Instant database file initialization et impact sur les fichiers de bases
de données
Tables, allocations, pages, extensions, stockage des lignes de
données
5. Edition 2012 – 10 et 11 décembre
Sponsors Platinum
INSTANT DATABASE FILE
INITIALIZATION
6. Edition 2012 – 10 et 11 décembre
INSTANT DATABASE FILE INITIALIZATION
Fichiers initialisés par une opération de remplissage de 0 (zeroing filling
operation) pour les opérations suivantes :
Création d’une base de données
Expansion de fichiers
Ajout de fichiers à une base de données
L’initialisation des fichiers peut prendre beaucoup de temps en fonction de
la taille de fichier à initialiser et de la performance du stockage
7. Edition 2012 – 10 et 11 décembre
INSTANT DATABASE FILE INITIALIZATION
INSTANT DATABASE FILE INITIALIZATION est une fonctionnalité qui permet
de s’affranchir de l’initialisation des fichiers (zeroing filling operation)
Concerne uniquement les fichiers de données. Les fichiers journaux ne sont
pas concernés (by design SQL Server se sert de cette opération pour
détecter la fin du journal lors d’un recovery)
Nécessite la mise en place de certains prérequis :
Privilège SE_MANAGE_VOLUME_NAME pour le compte de service SQL
Server
Support de la fonction SetFileValidData() par le système d’exploitation
Le fichier n’est pas un fichier sparse
Pas de chiffrement (TDE)
12. Edition 2012 – 10 et 11 décembre
PAGES
Une table ce n’est pas un tableau et des lignes du point de vue
stockage !!!
Les lignes de données sont stockées dans des pages de 8Ko (8192
octets)
Plusieurs types de pages (pages de données, pages d’index, pages
systèmes)
13. Edition 2012 – 10 et 11 décembre
PAGES
Header
CBA
Row A
Row B
Row C
96 octets
8096 octets
2 octets / ligne
14. Edition 2012 – 10 et 11 décembre
PAGES
Fonctions non documentées permettant de visualiser les pages
DBCC PAGE, DBCC IND (paramètres)
Outils relativement robuste mais attention quant à leur utilisation de
ces outils en production !!
15. Edition 2012 – 10 et 11 décembre
PAGES
Pages systèmes
• Boot page : Stocke des informations critiques (page 9 fichier 1)
• PFS : Page Free Space
Byte map pour chaque page
PFS intervall = 64MB
Traque l’espace libre dans les pages + enregistrement fantôme +
page IAM ? + page mixte ? Page allouée ?
L’espace libre est utilisée uniquement pour les tables heap + LOB +
varchar(max) + varbinary(max) + XML
16. Edition 2012 – 10 et 11 décembre
PAGES
Pages systèmes
GAM : Global Allocation Map
Détermine si une extent est disponible pour une allocation
Bitmap pour chaque extent
GAM intervalle = 4GB
SGAM : Shared Global Allocation Map
Détermine si une extent est miexte and possède au moins une
page non allouée disponible
Bitmap pour chaque extent
GAM intervalle = 4GB
17. Edition 2012 – 10 et 11 décembre
PAGES
Pages systèmes
DCM : Differential Change Map
Traque les extents modifiées depuis la dernière sauvegarde
complète
GAM intervalle = 4GB
• BCM : Bulk Change Map
Traque les extents modifiées par une opération BULK
GAM intervalle = 4GB
18. Edition 2012 – 10 et 11 décembre
PAGES
Pages systèmes
IAM : Index Allocation Map
Permet de connaître quelles extents sont allouées pour une entité
spécifique
GAM intervalle = 4GB
Pages IAM sont liées entre elles (chaine IAM)
19. Edition 2012 – 10 et 11 décembre
EXTENSIONS
Une extension est un regroupement de 8 pages de données contiguës
Les extensions rendent les allocations systèmes beaucoup plus efficaces
L’allocation des extensions est réalisée grâce aux pages systèmes PFS, SGAM
et GAM (bitmap par extension vs bitmap par page)
8 premières pages alloués page par page de n’importe quelle extension
dans le groupe de fichiers (extension mixte)
Une fois que ces 8 premières pages sont allouées, on bascule vers des
extensions dédiées (extentions uniformes)
Fonction non documentée pour visualiser les extensions
DBCC EXTENTINFO
21. Edition 2012 – 10 et 11 décembre
STOCKAGE D’UNE LIGNE DE DONNÉES
Format de stockage FixedVar
1 octets 1 octets 2 octets N octets 2 octets
Ceiling
(N cols /
8) octets
2 octets
(2 x nb
var cols)
octets
N octets
Partie fixe Partie variable
Status bit A
Status bit B
Longueur portion fixe
Données fixe
Nb cols
NULL bitmap
Nb var cols
Offset
Données variables
23. Edition 2012 – 10 et 11 décembre
Merci à nos Sponsors
Rencontrez les dans l’espace partenaires
Sponsors Platinum
Sponsors Gold
Sponsors Silver
24. Edition 2012 – 10 et 11 décembre
Continuez l’expérience online
Rejoignez la Communauté
Notes de l'éditeur
Les lignes de données ne sont pas stockées classés Seules les offsets le sont pour un index cluster (heap pas de classement)
Une ligne de données ne peut pas excéder 8060 octets. Dans le cas contraire certaines données de colonnes peuvent être automatiquement déplacés dans d’autre pages (LOB, VARCHAR etc …) avec un pointeur de 16 bytes ou 24 bytes en fonction du cas.
Lorsqu’une extent uniforme est allouée la première fois, seule la première page est utilisée. Le reste des pages sont utilisées par la suite lors des insertions de données
Status bit A contient une bitmap qui indique les propriétés d’une ligne
Bit 0 : information de version
Bits 1 à 3 : 0 primary record, 1 forwarding record, 2 forwared stub, 3 index record, 4 blob fragment, 5 ghost index record, 6 ghost data record, 7 ghost version record
Bit 4 : NULL bitmap existe. Avec SQL Server 2008 toujours présent même si données non null
Bit 5 : Données variables existent
Bit 6 : Row versionning existe
Bit 7 : Non utilisé
Status bit B :
1 bit est utilisé ici pour indiquer qu’il existe un enregistrement fantôme forwarded