Les journaux et les lecteurs de données ont des modèles d'accès aux données différents qui sont en conflit les uns avec les autres (au moins en théorie) lorsqu'ils partagent un lecteur.
Écritures de journal
L'accès aux journaux consiste en un très grand nombre de petites écritures séquentielles. De façon un peu simpliste, les journaux de base de données sont des tampons en anneau contenant une liste d'instructions pour écrire des éléments de données vers des emplacements particuliers sur le disque. Le modèle d'accès consiste en un grand nombre de petites écritures séquentielles qui doivent être garanties pour être terminées - elles sont donc écrites sur le disque.
Idéalement, les journaux devraient être sur un volume RAID-1 ou RAID-10 silencieux (c'est-à-dire non partagé avec autre chose). Logiquement, vous pouvez afficher le processus comme le SGBD principal écrivant les entrées de journal et un ou plusieurs threads de lecteur de journal qui consomment les journaux et écrivent les modifications sur les disques de données (en pratique, le processus est optimisé pour que les écritures de données soient écrites immédiatement si possible). S'il y a un autre trafic sur les disques de journal, les têtes sont déplacées par ces autres accès et les écritures de journal séquentielles deviennent des écritures de journal aléatoires. Celles-ci sont beaucoup plus lentes, donc les disques de journal occupés peuvent créer un hotspot qui agit comme un goulot d'étranglement sur l'ensemble du système.
Écritures de données
(mis à jour) Les écritures de journal doivent être validées sur le disque (appelées supports stables) pour qu'une transaction soit valide et éligible à la validation. On peut logiquement voir cela comme des entrées de journal en cours d'écriture, puis utilisées comme instructions pour écrire des pages de données sur le disque par un processus asynchrone. Dans la pratique, les écritures de page de disque sont réellement préparées et mises en mémoire tampon au moment de l'entrée du journal, mais elles n'ont pas besoin d'être écrites immédiatement pour que la transaction soit validée. Les tampons de disque sont écrits sur un support stable (disque) par le processus Lazy Writer (Merci à Paul Randal de l'avoir signalé) que cet article de Technet décrit un peu plus en détail.
Il s'agit d'un modèle d'accès très aléatoire, donc le partage des mêmes disques physiques avec des journaux peut créer un goulot d'étranglement artificiel sur les performances du système. Les entrées de journal doivent être écrites pour que la transaction soit validée, donc avoir des recherches aléatoires ralentissant ce processus (les E / S aléatoires sont beaucoup plus lentes que les E / S de journal séquentielles) transformeront le journal d'un séquenital en un périphérique d'accès aléatoire. Cela crée un sérieux goulot d'étranglement des performances sur un système occupé et doit être évité. Il en va de même lors du partage de zones temporaires avec des volumes de journaux.
Le rôle de la mise en cache
Les contrôleurs SAN ont généralement de grands caches RAM, qui peuvent absorber le trafic d'accès aléatoire dans une certaine mesure. Cependant, pour l'intégrité transactionnelle, il est souhaitable que les écritures sur disque à partir d'un SGBD soient garanties. Lorsqu'un contrôleur est configuré pour utiliser la mise en cache en écriture différée, les blocs sales sont mis en cache et l'appel d'E / S est signalé comme terminé à l'hôte.
Cela peut atténuer de nombreux problèmes de contention, car le cache peut absorber une grande partie des E / S qui, autrement, iraient sur le disque physique. Il peut également optimiser les lectures et écritures de parité pour RAID-5, ce qui diminue l'effet sur les performances des volumes RAID-5.
Ce sont les caractéristiques qui animent l'école de pensée «Laissez le SAN s'en occuper», bien que cette vision ait certaines limites:
La mise en cache en écriture différée a toujours des modes de défaillance qui peuvent perdre des données, et le contrôleur s'est infiltré dans le SGBD, disant que les blocs ont été écrits sur le disque alors qu'ils ne l'ont pas fait. Pour cette raison, vous ne souhaiterez peut-être pas utiliser la mise en cache en écriture différée pour une application transactionnelle, en particulier quelque chose contenant des données stratégiques ou financières où les problèmes d'intégrité des données pourraient avoir de graves conséquences pour l'entreprise.
SQL Server (en particulier) utilise les E / S dans un mode où un indicateur (appelé FUA ou Forced Update Access) force les écritures physiques sur le disque avant le retour de l'appel. Microsoft a un programme de certification et de nombreux fournisseurs de SAN produisent du matériel qui respecte cette sémantique (exigences résumées ici ). Dans ce cas, aucune quantité de cache n'optimisera les écritures sur disque, ce qui signifie que le trafic de journaux se bloquera s'il se trouve sur un volume partagé occupé.
Si l'application génère beaucoup de trafic disque, son jeu de travail peut dépasser le cache, ce qui entraînera également des problèmes de contention d'écriture.
Si le SAN est partagé avec d'autres applications (en particulier sur le même volume de disque), le trafic provenant d'autres applications peut générer des goulots d'étranglement de journal.
Certaines applications (par exemple les entrepôts de données) génèrent de grandes pointes de charge transitoires qui les rendent assez antisociaux sur les SAN.
Même sur un grand SAN, des volumes de journaux distincts sont toujours recommandés. Vous pouvez vous en tirer sans vous soucier de la mise en page d'une application peu utilisée. Sur les très grandes applications, vous pouvez même bénéficier de plusieurs contrôleurs SAN. Oracle publie une série d'études de cas de mise en page d'entrepôt de données dans lesquelles certaines des configurations les plus importantes impliquent plusieurs contrôleurs.
Mettez la responsabilité de la performance à sa place
Sur quelque chose avec de gros volumes ou lorsque les performances peuvent être un problème, responsabilisez l'équipe SAN pour les performances de l'application. S'ils vont ignorer vos recommandations de configuration, assurez-vous que la direction en est consciente et que la responsabilité des performances du système est au bon endroit. En particulier, établissez des directives acceptables pour les statistiques de performances de base de données clés comme les attentes d'E / S ou les attentes de verrouillage de page ou les SLA d'E / S d'application acceptables.
Notez que la responsabilité de la performance répartie entre plusieurs équipes crée une incitation à pointer du doigt et à renvoyer la balle à l'autre équipe. Il s'agit d'un anti-modèle de gestion connu et d'une formule pour les problèmes qui traînent pendant des mois ou des années sans jamais être résolus. Idéalement, il devrait y avoir un seul architecte habilité à spécifier les modifications de configuration de l'application, de la base de données et du SAN.
Évaluez également le système sous charge. Si vous pouvez l'arranger, les serveurs d'occasion et les tableaux à connexion directe peuvent être achetés à bon marché sur Ebay. Si vous configurez une boîte comme celle-ci avec une ou deux baies de disques, vous pouvez bricoler avec la configuration du disque physique et mesurer l'effet sur les performances.
À titre d'exemple, j'ai fait une comparaison entre une application s'exécutant sur un grand SAN (un IBM Shark) et une boîte à deux sockets avec une matrice U320 à connexion directe. Dans ce cas, 3 000 £ de matériel acheté hors d'eBay ont surpassé un SAN haut de gamme de 1 M £ par un facteur de deux - sur un hôte avec une configuration de processeur et de mémoire à peu près équivalente.
À partir de cet incident particulier, on pourrait affirmer qu'avoir quelque chose comme ça traîner est un très bon moyen de garder les administrateurs SAN honnêtes.