Schätzung der E / A-Anforderungen für die Bursty-Nutzung

11

Wir haben eine Anwendung, die den ganzen Tag über regelmäßig eine SQL-Datenbank abfragt. Es gibt Perioden mit null oder nur geringer Aktivität, die mit individuellen Anforderungen für relativ große Datenmengen durchsetzt sind. Wenn diese Anfragen eingehen, besteht das primäre Ziel darin, die Daten schnell zu liefern, und das sekundäre Ziel besteht darin, dies kostengünstig zu tun. Aufgrund der Art der Anwendung ist es ziemlich unwahrscheinlich, dass die Daten / Indizes aus der vorherigen Abfrage im RAM zwischengespeichert wurden (verschiedene Benutzer, die an verschiedenen Teilen der Daten arbeiten).

Für ein System, das relativ regelmäßig verwendet wird, habe ich die Faustregel gehört, die Länge der Festplattenwarteschlange zu beobachten und diese Zahl relativ klein zu halten. Dies wird speziell in AWS ausgeführt, wo ich die Faustregel gesehen habe, dass eine Festplattenwarteschlangenlänge von 1 pro 100 IOPS angemessen ist.

Wie kann ich die E / A-Anforderungen für ein solches System abschätzen? Ist die Länge der Festplattenwarteschlange ein zuverlässiger Indikator bei der Bearbeitung einzelner, platzender Abfragen? Gibt es andere Metriken, die ich berücksichtigen sollte?

Eric J.
quelle
Gibt es irgendwelche Schreibvorgänge oder ist das leselastig?
Jack sagt, versuchen Sie es mit topanswers.xyz
@ JackDouglas: Dies ist 98% liest. Es gibt eine Menge Schreibvorgänge.
Eric J.
1
Nächste Frage: Sind die Lesevorgänge verstreut oder führen Ihre "individuellen Anforderungen für relativ große Datenmengen" wahrscheinlich sequentielle E / A durch?
Jack sagt, versuchen Sie es mit topanswers.xyz
@JackDouglas: Die größten Lesevorgänge erfolgen über eine indizierte Ansicht, sodass die WHERE-Klausel dem Index entspricht, jedoch mehr Daten zurückgibt als nur das, was im Index enthalten ist. Ich bin mir nicht sicher, was das für den Grad der sequentiellen E / A bedeutet. Da das zugrunde liegende E / A-Subsystem AWS EBS ist, bin ich mir nicht sicher, wie sich dies auf den physischen Zugriff auswirkt.
Eric J.
Das zugrunde liegende E / A-Subsystem wirkt sich auf die Konsistenz der Leistung aus , kümmert sich jedoch ähnlich wie beim lokalen Speicher um den verstreuten sequenziellen Zugriff. Wie viele verschiedene Blöcke treffen diese großen Lesevorgänge normalerweise? Der Index-Scan selbst erfolgt sequentiell, der Tabellenzugriff jedoch nicht, wenn ich Sie bisher richtig verstanden habe.
Jack sagt, versuchen Sie es mit topanswers.xyz

Antworten:

10

Die primäre Metrik, die ich in SQL Server immer für E / A in Betracht gezogen habe, ist nicht IOPs oder Festplattenwarteschlangenlänge, sondern der Festplattendurchsatz (sec / read und sec / write). Insgesamt geht es in Datenbanken nicht darum, wie viele Vorgänge Sie auf eine Festplatte werfen können, sondern darum, wie schnell diese Vorgänge abgeschlossen sind. Die allgemeine Faustregel lautet, weniger als 20 ms / Betrieb zu haben (obwohl niedriger immer besser ist). Weitere Details finden Sie in diesem Artikel .

Die Länge der Festplattenwarteschlange ist falsch und nicht mehr relevant. Das Problem dabei ist, dass der Wert die Warteschlange für ein einzelnes Laufwerk misst, aber jetzt, da wir in einem Zeitalter von RAIDs, SANs und anderem verteilten Speicher leben, gibt es keine Möglichkeit, diesen Wert richtig in eine aussagekräftige Zahl zu übersetzen. Ein guter Ausgangspunkt für Leistungsmetriken ist dieses Poster von Quest / Dell , das Ihnen viele Informationen und Erklärungen gibt, warum oder warum sie nicht wichtig sind. Sie müssen nicht alle verwenden, aber sie sind ein Anfang.

Um Ihr E / A zu testen, müssen Sie Ihre Arbeitslast auf dem Höhepunkt verstehen. Wie viele Transaktionen und wie viel wird zwischengespeichert? Wenn Sie diese nicht kennen und gemessen haben, ist es wirklich schwer zu beurteilen. Sie können Arbeitslasten erstellen und Tools wie SQLIO verwenden , um Ihren Speicher zu testen. Sie benötigen jedoch Arbeitslastmuster, um einen ordnungsgemäßen Test zu erstellen.

Zum Schluss noch ein Hinweis zu AWS: Meines Wissens garantiert Amazon keine E / A-Leistung in AWS. Dies liegt hauptsächlich daran, dass der Speicher eine massive gemeinsam genutzte Ressource ist und es unmöglich ist, die Muster von Ihnen und Ihren Nachbarn in einem bestimmten Speicherbereich zu messen (siehe das Problem mit lauten Nachbarn ).

Meine Empfehlung wäre, so viel Speicher wie möglich zuzuweisen. SQL Server wird Inhalte nur dann aus dem Speicher verschieben, wenn sie unter Druck und Speicherplatz im Pufferpool stehen (basierend auf LRU-K). Wenn Ihr Pufferpool also den größten Teil der Datenbank im Speicher speichern kann, können Sie einen Teil der Burst-Leistung verringern. Berücksichtigen Sie auch Taktiken, die Cache-Objekte "warm" halten können. Behalten Sie abschließend SQL 2014 und die neue Hekaton- Funktion im Auge .

Mike Fal
quelle
"SQL Server wird Inhalte nur dann aus dem Speicher verschieben, wenn sie unter Druck stehen" oder an einem Kontrollpunkt ?
Jack sagt, versuchen Sie es mit topanswers.xyz
5
Checkpoint entfernt keine Objekte aus dem Puffer, schreibt jedoch fehlerhafte Seiten zur Wiederherstellung auf die Festplatte. Die Objekte im Pufferpool werden weiterhin verwaltet.
Mike Fal
Vielen Dank für die ausführliche Antwort. AWS verfügt jetzt über eine Premium-Funktion namens Provisioned IOPS, die sicherstellt, dass die gekaufte Anzahl von E / A-Vorgängen pro Sekunde in 99,9% der Fälle ausgeführt werden kann. Ich denke, eine E / A-Operation ist definiert als Lesen oder Schreiben eines 16K-Datenblocks.
Eric J.
@ MikeFal: Haben Sie irgendwelche Gedanken zur Testmethode speziell für dieses Burst-Muster? Führen Sie einfach eine einzelne Abfrage aus und beobachten Sie die fraglichen Zähler? Führen Sie eine Reihe von (normalerweise periodischen) Abfragen nacheinander aus und beobachten Sie die Zähler?
Eric J.
Ja, ich kenne PIOPS. Wie gesagt, ich möchte nicht wissen, wie viele Operationen ausgeführt werden können, ich möchte wissen, wie schnell sie sind. Und dies kann von AWS selbst bei PIOPs nicht garantiert werden.
Mike Fal