web-dev-qa-db-fra.com

Je veux savoir sur les IOPS (I / O par seconde) et comment il influence l'opération de DB CRUD

Je souhaite obtenir un serveur dédié pour ma base de données (MySQL) qui exécute un moteur InnoDB. Il y a cette option dans la capacité d'Innodb que vous pouvez définir les iops dedans. Disons que j'ai un disque dur SATA 72K-RPM qui permet de 100 iops. Cela signifie-t-il que mon DB peut exécuter 100 requêtes SQL simultanées par seconde ou cela signifie 100 simples lecture ou écrire en 1 seconde? Comment une DB peut gérer 3000 requêtes par seconde lancée sur un matériel comme ça? Je suis un peu confus alors s'il vous plaît expliquez-le pour moi. Je veux obtenir plus de 200 exécutions de requête sur mon serveur dédié.

8
Alex

L'IOPS d'un disque dur vous dit combien d'opérations d'E/S que le lecteur particulier peut fonctionner par seconde. Depuis que des lectures aléatoires, des écrivies aléatoires, des lectures séquentielles et des écrivies séquentielles ont des caractéristiques de performance différentes, si vous envisagez un seul numéro, cela implique qu'il s'agit d'une moyenne pondérée de ces quatre nombres qui représentent une charge de travail. Cette charge de travail peut ne pas être similaire à la charge de travail qu'une base de données effectuerait réellement pour que votre système puisse finir de manière plus ou moins d'opérations par seconde.

Une requête SQL, en supposant que cela fait des E/S physiques (de nombreuses requêtes n'ont pas besoin de faire des E/S, car ils lisent simplement des données déjà dans la mémoire de la base de données ou dans le cache du système de fichiers ou dans le SAN cache), tendent à exécuter de nombreuses opérations d'E/S. Si vos requêtes font effectivement des E/S physiques, une seule requête pourrait facilement faire 100 opérations d'E/S par seconde. Vous pouvez potentiellement avoir 100 requêtes en cours d'exécution simultanément Chacune ne fait que faire une opération d'E/S physique par seconde, mais cela signifierait probablement que les 100 requêtes prendraient une quantité de temps inacceptable pour revenir.

De manière réaliste, si vous devez gérer 3 000 requêtes par seconde, vous devez vous assurer que la grande majorité de vos requêtes n'ont pas besoin de faire des E/S physiques en veillant à ce que les données dont elles ont besoin sont en cache (de préférence par la base de données). Et vous devrez diffuser les E/S sur un nombre relativement important de lecteurs (avec une configuration RAID appropriée) pour augmenter le total des iops que le système peut effectuer. Ce type de planification de la capacité va nécessiter une compréhension raisonnablement bonne de votre application, vos données, combien d'E/S chaque requête aura probablement besoin, etc. et vous aurez probablement besoin d'équilibrer le coût contre la performance-- ajoutant Mémoire ou ajouter des lecteurs ou la modification de la configuration RAID impliquera différents compromis entre les coûts, les performances et les espaces disponibles qui devront être pris en compte. Vous pouvez également envisager de séparer la charge de travail entre plusieurs serveurs (qui peuvent nécessiter des modifications architecturales à votre application).

10
Justin Cave