Dernièrement un de mes clients qui avait une instance SQL Server qui souffrait principalement de problèmes de performances IO a investi dans l’achat de disques SSD et d’une carte IO Fusion. Les performances attendues pour les SSD sont de l’ordre de 20000 IOPS et 100000 IOPS pour la carte IO Fusion. Ces performances sont annoncées pour une taille de block de 4Ko en lecture aléatoire . Autant dire que c’était une bonne occasion de voir ce que ces nouvelles technologies ont dans le ventre lorsqu’il s’agit de SQL Server !!
La configuration des tests est la suivante :
 Configuration du serveur et du stockage :
Serveur HP Proliant DL580G7 :
- 32GB RAM
- 2x Processors Xeon X7542 cadencés à 2.66GHz (6 cores par processeurs soit 12 CPU logiques)
En local sur le serveur :
- 1GB Flash Back Cache
- 2x 146GB 6G SAS 15k rpm disks modèle HP EH0146FAWJB
- 4x 120GB Hot-Plug SSD drive HP 120GB 3G SATA SFF modèle ATA MK0120EAVDT (avec une carte contrôleur HP SMART ARRAY P410in)
- 1x 160GB HP PCIe IO Accelerator (100 000 IOPS)
Sur le SAN HITACHI USPVM relié sur le serveur :
- 2 cartes HBA QLogicÂ
- Fibre optique 4Go/s
- 3 LUN en raid 5 avec disques SSD du même modèle (LUN dédiées à SQL Server)
- 1 seul path défini pour chaque LUN
Â
Le serveur a été installé avec Windows Server 2008 R2 Enterprise avec un paramétrage par défaut.
Â
 Les architectures disques suivantes ont fait l’objet du test :
Architecture | Nb de Disques | Carte contrôleur RAID | Cartes HBA | Autres |
RAID1 LOCAL | 2 disques SSD | Stripe size unit = 64 Ko, Accelerator IO activité (ratio 25/75 en lecture/écriture) |           - |                     - |
RAID 10 LOCAL | 4 disques SSD | Stripe size unit = 64 Ko, Accelerator IO activité (ratio 25/75 en lecture/écriture) |           - |                     - |
RAID 5 SAN | 4 disques SSD | Stripe size unit = 256 Ko | Paramètres par défaut | Cache en lecture – écriture > 20GB |
Carte HP IO Fusion | Â | Â | Â | Formatage en mode Max write performance |
De plus, chaque partition disque a été formaté avec une taille de cluster de 64 Ko en NTFS.
Â
 Les tests de performances ont été effectués à l’aide de SQLIO :
Block size (en Ko) | 8, 64, 128, 256, 512, 1024 |
Outstanding | 1, 8, 32, 64 |
Opérations | Read / write |
Mode | Random |
Nb threads | 12 (1 thread par CPU) |
Temps / série (en s) | 60 |
File size | 2 GB |
96 séries de tests ont été effectuées. Les tailles de blocs choisies couvrent la plupart des opérations initiées par SQL Server en mode aléatoires telles que :
- Lectures des données (hors index)
- Lecture des index
- Lazy writer
- Checkpoint
Le nombre de threads est égale au nombre de CPU présents sur le serveur.
Mon temps étant limité pour effectuer ces tests (eh oui le temps c’est de l’argent !!!), je me suis vraiment concentré sur les opérations de lecture et écriture aléatoires. Les résultats présentés ci-dessous montrent le nombre d’entrées / sorties et le débit maximum que peut offrir chaque architecture disque pour chaque série de test dont la latence est strictement inférieure à 20ms (au delà de ce seuil le sous système disque est considéré comme peu performant).
Â
Â
Â
Â
Â
Â
Â
Â
On peut immédiatement remarquer que les performances annoncées pour les cartes HP IO Accelerator et des disques SSD sont au rendez vous tant en lecture qu’en écriture. Le nombre d’IOPS que peut traiter ce type de carte est tout simplement impressionnant. A contrario, les performances de l’architecture en RAID 5 du SAN ne sont pas satisfaisantes malgré la présence de disques SSD. Ceci ne me surprend pas en réalité car de nombreux composants entre en jeu dans ce type d’architecture (cartes HBA, fibre optique, fabriques, carte contrôleur etc). Chaque composant doit être configuré de manière rigoureuse pour obtenir de bonnes performances. Dans le cadre de mon test il n’y a eu aucune configuration particulière sur ces éléments.
Les configurations en RAID 1 et RAID 10 offrent des performances presque similaires en lecture, ce qui pourrait surprendre mais les performances de ces types d’architectures dépendent fortement de l’intelligence des cartes contrôleurs qui les gèrent. En effet, les cartes contrôleurs HP Smart Array récentes permettent, lorsqu’il s’agit de RAID1, de lire les données sur les 2 disques en même temps. Ceci permet de doubler la capacité de lecture. Le RAID 10, dans notre cas, double également la capacité de lecture (2 paires de disques en miroir qui sont elles mêmes agrégées). Il n’est pas sûr que la carte contrôleur HP Smart Array 410in puisse lire sur les 4 disques en même temps ce qui expliquerait les performances quasi égales en lecture entre le RAID1 et le RAID10 … Je me renseignerai sur le sujet et mettrais à jour ce billet le cas échéant.
Enfin en écriture on voit une nette diminution des performances pour l’ensemble des architectures de disques testées. La carte HP IO Fusion arrive encore première suivis par le RAID 10, RAID5 et RAID 1. On peut noter qu’en écriture le RAID5 est plus performant que le RAID1 dans notre contexte. Ceci peut s’expliquer par la présence d’un cache beaucoup plus important sur le SAN que sur la carte contrôleur locale et qui joue ici tout son rôle. Il faut noter également qu’en écriture aléatoire les performances IO des disques SSD HP 120GB 3G SATA SFF tombent en dessous des 5000 IOPS pour une taille de bloc de 4Ko.
Il aurait été intéressant de pousser le test avec d’autres configurations de CHUNK des cartes contrôleurs, d’allonger également la durée des tests ou encore d’augmenter la taille du fichier de test pour éviter la mise en cache … peut être une prochaine fois. Je terminerais ce billet en disant que la mise en place des disques SSD, de la carte HP PCIe IO Accelerator et d’une configuration optimale des partitions ont augmenté de 60% les performances de l’application client. Le jeu en a value la chandelle cette fois-ci !!! Les 40% restant ne pourront être gagnés que par de l’optimisation a un plus haut niveau (répartition des tables, index sur d’autres FILEGROUP, optimisation du code TSQL de l’application).
N’hésitez pas à me faire part de vos remarques !!
David BARBARIN (Mikedavem)
MVP SQL Server
Salut,
En -BH pour ma part.
Oui je suis tout à fait d’accord avec toi concernant la carte SMART ARRAY. Il n’y a pas en effet une lecture parallèle sur les 2 disques mais bien une écriture effectuée sur le disque dont la tête est plus proche du secteur où se trouve la donnée à la fois. Cela équivaut à peu près à doubler le débit … mais pas tout à fait.
++
Hello,
Tu fais tes tests en -BH ou en -BS ?
Autre chose, d’après ce que je comprends, la carte Smart Array fait du load balancing sur un RAID1, ce qui ne veut pas tout à fait dire qu’elle peut lire sur les deux disques en même temps. Elle lit les blocs alternativement sur les deux disques pour éviter d’avoir à attendre le retour d’un bloc avant d’en lire un autre, mais elle les lit bien l’un après l’autre, non ?
Salut
Pouvez-vous nous donner un lien pour mieux savoir sur les technologies de stockages et mémoire vive?
Merci d’avance.