Wie kann ich feststellen, wie viele IOPs ich für meine AWS RDS-Datenbank benötige?


14

Ich migriere einen Teil einer MySQL-Datenbank nach AWS. Bei den fraglichen Daten handelt es sich um 99% Schreibzugriff, und jede Zeile enthält etwa 1 KB Varchar-Felder, eine Datums- und Uhrzeitangabe sowie 4 Zoll.

Ich schätze, dass wir in Spitzenzeiten zwischen 20 und 25.000 Datensätze pro Stunde benötigen.

Ich habe iostat -h auf der aktuellen Datenbank ausgeführt und es wurden ungefähr 40 tps gemeldet.

Wie finde ich heraus, welche Art von IOPS ich benötige?

Antworten:


11

Du musst es testen.

Sie können die Hüllkurvenberechnungen etwas zurücknehmen, um die Anzahl der E / A-Vorgänge pro Einfügung zu schätzen, sie mit der Anzahl der Transaktionen pro Sekunde zu multiplizieren, sie in einem Pufferraum usw. hinzuzufügen, aber es ist viel einfacher, sie nur zu testen.

Am einfachsten ist es, eine bestmögliche Schätzung zuzuweisen und diese dann zu erhöhen oder zu verringern, um sie an die tatsächlichen Testbedingungen anzupassen. Dies ist einer der Vorteile der Verwendung einer Cloud-basierten Umgebung, da Änderungen an der Hardware nur geringe Kapitalkosten verursachen und für solche Änderungen in der Regel nur Konfigurationsaktualisierungen erforderlich sind. Mit EBS-Volumes können Sie nicht nur die Anzahl der IOPS erhöhen, sondern müssen auch die Größe des Volumes erhöhen 1 . Sie können jederzeit ein neues Volume erstellen und Ihre Daten kopieren. Es wird einige Ausfallzeiten geben, aber wenn Ihre Daten nicht riesig sind , sollte es nicht viel sein, wie es eine Rohkopie wäre.

Hier ist eine Schätzung der Anzahl der erforderlichen I / Os. Auch hier ist es nur eine Vermutung, da die Einzelheiten von der Anzahl der Indizes und davon abhängen, ob Ihr Verkehrsfluss glatt oder stachelig ist. Bei 25K tx / Stunde haben Sie ~ 7 tx / Sek. Die Größe jeder Zeile ist nicht besonders relevant, da sie kleiner ist als die Größe einer einzelnen E / A (4 KB). Jede Transaktion wird irgendwo zwischen 1-5 IOP (primäre Einfügung plus ein paar Indexbaum-Einfügungen) ausgeführt. Sagen wir also ~ 35 / s.

Ich sage, fangen Sie mit einem Minimum von 100 IOPS an und skalieren Sie es bei Bedarf.


1
Übrigens: Wir haben eine 300-GB-Datenbank eingerichtet, was mindestens 1000 IOPS bedeutete. Nach ungefähr 6 Monaten Live-RDS gab es keine Zwischenfälle aufgrund von E / A-Problemen. Wahrscheinlich übertrieben, aber so nah wie möglich am Feuer und vergessen.
Chris

Je nach Auslastung benötigen Sie keine bereitgestellten IOPs. Sofern Sie nicht mehr als 2500-3500 IOPs insgesamt benötigen, reicht der Standardspeicher für 300 GB (aufgrund von EBS-Striping).
Ross

7

Ich habe das grundlegende iostat-Tool (iostat -h) verwendet, um eine Vorstellung davon zu bekommen, wie viele iops ich aktuell verwendet habe. Daraus extrapolierte ich, wie viel ich verwenden würde, wenn ich unter dem 4-fachen der Lademenge wäre, und ging mit dieser Menge um. Für mich hat das mit 780 IOPS geklappt, also bin ich mit 800 IOPS gefahren.


iostat -h meldet ungefähr 40 tps, entspricht das also 40 iops? Das würde mit den von @sehrope berechneten Zahlen übereinstimmen.
Chris

1
Das ist richtig.
Mark D

0

Ich verwende iostat, um die Menge an IOPS zu bestimmen, die meine Anwendung ausführt. iostat meldet dies als tps. Mit KB / t können Sie feststellen, ob die Übertragungsmenge unter der Blockgröße von 256 KB liegt. Ich starte iostat mit einer Wartezeit von einer Sekunde, dh iostat -w 1.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.