Estimation des exigences d'E / S pour une utilisation en rafale

11

Nous avons une application qui interroge une base de données SQL périodiquement tout au long de la journée. Il y a des périodes d'activité nulle ou seulement légère, entrecoupées de demandes individuelles de quantités relativement importantes de données. Lorsque ces demandes arrivent, l'objectif principal est de fournir les données rapidement et l'objectif secondaire est de le faire de manière rentable. En raison de la nature de l'application, il est assez peu probable que les données / index aient été mis en cache dans la RAM de la requête précédente (différents utilisateurs, travaillant sur différentes parties des données).

Pour un système qui connaît une utilisation relativement stable, j'ai entendu la règle de base pour observer la longueur de la file d'attente du disque et garder ce nombre relativement petit. Cela fonctionnera spécifiquement dans AWS, où j'ai vu la règle générale qu'une longueur de file d'attente de disque de 1 pour 100 IOPS est raisonnable.

Comment estimer les besoins d'E / S pour un tel système? La longueur de la file d'attente du disque est-elle un indicateur fiable lorsqu'il s'agit de requêtes individuelles et explosives? Y a-t-il d'autres mesures à prendre en compte?

Eric J.
la source
Y a-t-il des écritures en cours ou est-ce difficile à lire?
Jack dit d'essayer topanswers.xyz le
@JackDouglas: C'est 98% de lectures. Il y a un filet d'écritures.
Eric
1
Question suivante: les lectures sont-elles dispersées ou vos "demandes individuelles pour des quantités de données relativement importantes" sont-elles susceptibles de faire des E / S séquentielles?
Jack dit d'essayer topanswers.xyz le
@JackDouglas: Les lectures les plus importantes se font via une vue indexée, telle que la clause WHERE correspond à l'index, mais renvoyant plus de données que ce qui se trouve dans l'index. Je ne sais pas ce que cela signifie pour le degré d'E / S séquentielles. Étant donné que le sous-système d'E / S sous-jacent est AWS EBS, je ne sais pas comment cela affecte l'accès physique.
Eric J.27
Le sous-système d'E / S sous-jacent affectera la cohérence des performances , mais se souciera de l'accès séquentiel v dispersé de la même manière que le stockage local. Ces grandes lectures, combien de blocs distincts frappent-ils généralement? Le scan d'index lui-même sera séquentiel mais l'accès à la table ne le sera pas si je vous ai bien compris jusqu'à présent.
Jack dit d'essayer topanswers.xyz le

Réponses:

10

La métrique principale que j'ai toujours prise en compte pour les E / S dans SQL Server n'est pas les IOP ou la longueur de file d'attente de disque, mais le débit du disque (sec / reads et sec / writes). Dans l'ensemble, les bases de données ne concernent pas le nombre d'opérations que vous pouvez lancer sur un disque, mais la rapidité avec laquelle ces opérations sont terminées. La règle générale est d'avoir moins de 20 ms / opération (bien que plus bas soit toujours mieux). Plus de détails peuvent être trouvés dans cet article .

La longueur de la file d'attente du disque est une statistique bidon et n'est plus pertinente. Le problème est que la valeur mesure la file d'attente pour un seul lecteur, mais maintenant que nous vivons à une époque de RAID, de SAN et d'autres stockages distribués, il n'y a aucun moyen de traduire correctement cette valeur en un nombre significatif. Un excellent point de départ pour les mesures de performances est cette affiche de Quest / Dell qui vous donne beaucoup de choses et d'explications pour savoir pourquoi ou pourquoi elles sont importantes. Vous n'êtes pas obligé de les utiliser tous, mais c'est un début.

Pour tester votre E / S, vous devez comprendre votre charge de travail à son apogée. Combien de transactions et combien sont mises en cache? À moins que vous ne les connaissiez et ne les ayez mesurés, il est vraiment difficile de juger. Vous pouvez créer des charges de travail et utiliser des outils comme SQLIO pour tester votre stockage, mais vous aurez besoin de modèles de charge de travail pour créer un test approprié.

Enfin, une note sur AWS: à ma connaissance, Amazon ne garantira pas les performances d'E / S dans AWS. Cela est principalement dû au fait que le stockage est une ressource partagée massive et qu'il est impossible d'évaluer les modèles de vous et de vos voisins sur une zone de stockage particulière (voir le problème du voisin bruyant ).

Ma recommandation serait d'allouer autant de mémoire que possible. SQL Server ne poussera les éléments de la mémoire que s'ils sont sous pression et d'espace dans le pool de mémoire tampon (basé sur LRU-K). Donc, si votre pool de mémoire tampon peut stocker la plupart de la base de données en mémoire, vous pouvez atténuer certaines des performances explosives. Envisagez également des tactiques qui peuvent garder les objets du cache "au chaud". Enfin, gardez un œil sur SQL 2014 et la nouvelle fonctionnalité Hekaton .

Mike Fal
la source
"SQL Server ne poussera les éléments de la mémoire que sous pression" ou à un point de contrôle ?
Jack dit d'essayer topanswers.xyz le
5
Checkpoint ne supprime pas les objets du tampon, mais écrit les pages sales sur le disque pour la récupération. Il conservera toujours les objets dans le pool de mémoire tampon.
Mike Fal
Merci pour la réponse détaillée. AWS dispose désormais d'une fonctionnalité premium appelée IOPS provisionnées qui garantit que le nombre acheté d'opérations d'E / S peut être effectué 99,9% du temps. Je pense qu'une opération d'E / S est définie comme la lecture ou l'écriture d'un bloc de 16 Ko de données.
Eric
@MikeFal: Avez-vous des réflexions sur la méthodologie de test spécifiquement pour ce modèle éclaté? Il suffit d'exécuter une seule requête et de regarder les compteurs en question? Exécuter un certain nombre de requêtes (normalement périodiques) l'une après l'autre, en regardant les compteurs?
Eric
Oui, je connais les PIOPS. Comme je le dis, je ne veux pas savoir combien d'opérations peuvent être effectuées, je veux savoir à quelle vitesse elles sont. Et ce n'est pas quelque chose qui peut être garanti par AWS, même sur les PIOP.
Mike Fal