Comment puis-je déterminer le nombre d'IOP dont j'ai besoin pour ma base de données AWS RDS?

14

Je migre une partie d'une base de données mysql vers AWS. Les données en question sont écrites à 99% et chaque ligne a environ 1k de champs varchar, un datetime et 4 ints.

J'estime que nous aurons besoin de 20 à 25 000 enregistrements insérés / heure pendant les heures de pointe.

J'ai exécuté iostat -h sur la base de données actuelle, et il a rapporté environ 40 tps.

Comment déterminer le type d'IOPS dont j'ai besoin?

chris
la source

Réponses:

11

Vous devrez le tester.

Vous pouvez effectuer certains calculs des enveloppes pour approximer le nombre d'E / S par insertion, le multiplier par le nombre de transactions par seconde, ajouter dans une salle tampon, etc., mais il est beaucoup plus facile de simplement le tester.

La chose la plus simple à faire est d'allouer une meilleure estimation, puis de revenir en arrière et de l'augmenter ou de la diminuer pour qu'elle corresponde à vos tests réels. C'est l'un des luxes de l'utilisation d'un environnement basé sur le cloud, les changements matériels sont faibles en coûts d'investissement et ces changements ne nécessitent généralement que des mises à jour de configuration. Avec les volumes EBS, vous ne pouvez pas simplement augmenter le nombre d'IOPS, vous devez également augmenter la taille du volume 1 . Vous pouvez toujours simplement créer un nouveau volume et copier vos données. Il y aura des temps d'arrêt, mais si vos données ne sont pas énormes, cela ne devrait pas être beaucoup plus que ce serait une copie brute.

Voici une estimation du nombre d'E / S nécessaires. Encore une fois, c'est juste une supposition, car les détails dépendent du nombre d'index et de la fluidité ou de la fluidité de votre trafic. À 25 000 tx / heure, vous avez ~ 7 tx / sec. La taille de chaque ligne n'est pas particulièrement pertinente car elle est inférieure à la taille d'une seule E / S (4K). Chaque transaction fera entre 1 et 5 IOP (insert principal plus quelques inserts d'arbre d'index), alors disons ~ 35 / s.

Je dis commencer avec le strict minimum de 100 IOPS et évoluer si nécessaire.

sehrope
la source
1
BTW, à la suite de cela: nous avons mis en place une base de données de 300 Go, ce qui signifiait un minimum de 1000 IOPS. Après environ 6 mois en direct sur RDS, nous avons enregistré 0 incidents en raison de problèmes d'E / S. Probablement exagéré, mais aussi près du feu et oubliez que possible.
chris
En fonction de votre charge - vous n'avez pas besoin d'IOP provisionnés. À moins que vous n'ayez besoin de plus de 2500 à 3500 IOP au total, le stockage standard fera 300 Go (en raison de la répartition EBS).
Ross
7

J'ai utilisé l'outil de base iostat (iostat -h) pour avoir une idée du nombre d'iops que j'utilisais actuellement. À partir de cela, j'ai extrapolé combien j'utiliserais si j'avais moins de 4 fois cette quantité de charge et j'allais avec cette quantité. Pour moi, cela a fonctionné à 780 IOPS, donc je suis allé avec 800 IOPS.

Mark D
la source
iostat -h rapporte environ 40 tps, cela correspond-il donc à 40 iops? Cela correspondrait aux chiffres calculés par @sehrope.
chris
1
C'est correct.
Mark D
0

J'utilise iostat pour déterminer la quantité d'IOPS que mon application effectue. iostat le signale comme tps. Ko / t vous aide à déterminer si le montant du transfert est inférieur à la taille du bloc, 256 Ko. Je lance iostat avec un temps d'attente d'une seconde, c'est-à-dire iostat -w 1.

Prof Mo
la source