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?
quelle
Antworten:
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 .
quelle