[SQL Server] Performance tuning : optimisation de partitions

Ce billet très court traite du performance tuning des partitions utilisées par et pour toute instance SQL Server. Suivant le contexte (i.e., Windows Server 2008 ou pas), il est recommandé de mettre en application les différents éléments présentés dans ce billet, et idéalement avant toute installation de SQL Server.

Alignement de partitions (versions antérieures à Windows 2008 uniquement)

Sachant que les disques ont généralement 512 octets de secteurs, il faut noter que dans les versions inférieures à Windows Server 2008, lorsqu’une partition est créée, l’OS réserve, par défaut, les 63 premiers secteurs d’un disque dur (soit 63×512 octets = 31,5 Ko) pour des informations telles que le MBR (Master Boot Record) ou la table d’allocation des partitions. Ainsi, dans le cas d’un RAID avec une taille de stripe (bande) égale à 64 Ko, le 1er cluster (ensemble de secteurs) de la partition se retrouve scindé entre la fin du premier stripe et le début du second. Cela signifie que pour lire le contenu du 1er cluster (et d’ailleurs de tous les autres clusters), il faudra en réalité lire deux stripes, ce qui implique la multiplication par 2 des I/O, et donc une certaine baisse de performances.

La solution pour réduire ces problèmes de performances en I/O est de décaler le premier secteur de données utilisateur au début du second stripe (du moins, de façon à ce que le début et la fin du secteur coïncide avec le début ou la fin d’un stripe). C’est ce qu’on appelle l’alignement.

Pour mieux étayer cela voici un schéma synthétique :


Si Windows Server 2003 est utilisé, pour aligner les partitions (avec une valeur supérieure à 64 Ko), il est possible de procéder comme suit sous Powershell ou l’invite de commande MS-DOS en utilisant diskpart:

C:> diskpart
DISKPART > select disk N
DISKPART > create partition primary align=1024

N est le numéro du disque que l’on souhaite traiter. La liste des disques et de leur numéro est consultable en tapant les lignes de commandes suivantes :

C:> diskpart
DISKPART > list disk

N’utilisez pas diskpart pour la consultation d’informations plus détaillées (comme verification de l’offset de départ des partitions) du fait de ses imprécisions (i.e., il peut fournir des résultats erronés comme le fait d’interpréter 31,5Ko comme 32Ko). Utilisez plutôt l’utilitaire Windows wmic :

C:> wmic partition get BlockSize, StartingOffset, Name, Index

La commande MS-DOS ci-dessus liste, pour chaque partition créée, la taille de bloc (secteur), l’offset de départ (i.e., la taille en octets des premiers secteurs réservés par l’OS), le nom de la partition et l’index.

Notons bien que depuis Windows 2008, ces problèmes d’alignement ont été résolus par Microsoft. En effet, 1024Ko d’offset sont automatiquement réservés par l’OS lors de la création de partitions.

Allocation de clusters

Par défaut, Windows alloue 4 Ko d’unité d’allocation de clusters au sein d’une partition. Cette valeur est d’autant peu adaptée à MSSQL qu’il est impératif de la modifier en lui attribuant au moins 64Ko.

Pour ce faire, il y a diverses façons de s’y prendre (Gestionnaire de disque de Windows, utilitaires Diskpart,…), mais nous allons utiliser, en guise d’exemple, diskpart.

Pour attribuer une taille d’allocation de 64 Ko pour chaque partition, tapons les lignes de commande suivante (sous l’invite de commande MS-DOS ou Powershell):

C:> diskpart
DISKPART > select disk 3
DISKPART > create partition primary align=1024
DISKPART > assign letter=L
DISKPART > exit
C:> format /fs:ntfs /A:64K /V:"SQL Logs" /Q G:

L’exemple ci-dessus montre comment créer proprement la partition L dédiée aux logs (SQL Logs) avec une taille de cluster de 64 Ko et un offset de 1024 Ko.

Soulignons que sous Windows Server 2008 minimum, « align=1024 »
est facultatif étant donné que l’offset par défaut est déjà à 1024 ko.


Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s