Der Hauptfokus dieser Blogsite liegt auf der Leistung in einer SQL Server-Umgebung. Man könnte argumentieren, dass Leistung mit dem Datenbank- und Anwendungsdesign beginnt. Sie können aber auch argumentieren, dass die Verfügbarkeit der richtigen Ressourcen für eine gute Leistung unerlässlich ist. Bei all der Diskussion über die richtigen Ressourcen (welches CPU-Modell, wie viel Arbeitsspeicher, welche Art von Speicher) vernachlässigen wir manchmal die Kapazitätsplanung:die Verwendung der Daten, die wir haben um fundierte Entscheidungen darüber zu treffen, was wir brauchen . Bei der Kapazitätsplanung geht es nicht nur darum, herauszufinden, wie viel Speicherplatz wir benötigen, sondern auch um die Ressourcen, die eine SQL Server-Instanz zur Verfügung haben muss, um die Arbeitslast zu bewältigen.
Neu oder bereits vorhanden?
Die Kapazitätsplanung für eine neue Lösung ist wirklich schwierig. Sie müssen auf der Grundlage von Informationen, die Sie vom Unternehmen sammeln, Schätzungen zur Arbeitsbelastung erstellen. Das bedeutet, dass Sie schwierige Fragen stellen müssen, wie viele Daten sie im ersten Monat, in den ersten sechs Monaten und im ersten Jahr erwarten. Wenn eine neue Lösung auf den Markt kommt, ist dies oft das LETZTE, worüber das Unternehmen nachdenkt, sodass Sie sehr oft vage Antworten erhalten. Im Falle einer neuen Lösung müssen Sie sich wirklich nach bestem Wissen und Gewissen bemühen. Reißen Sie sich nicht die Haare aus, wenn Sie versuchen, genaue Zahlen zu erhalten.
Wenn die Lösung von einem Anbieter stammt, müssen Sie den Anbieter um Planungsempfehlungen zum erforderlichen Speicherplatz und den erforderlichen Ressourcen bitten. Ich gebe zu, sie haben diese Daten vielleicht nicht, aber Sie bekommen nicht das, wonach Sie nicht fragen. Es schadet nie, es zu versuchen.
[Bonus:Wenn der Anbieter keine Informationen zur Verfügung stellen kann, wäre es nicht hilfreich, wenn Sie ihm, nachdem das System einige Monate in Betrieb ist, Ihre Daten zusenden ... z. B. welche Hardware Sie haben , und wie sieht die Auslastung aus? Es muss kein 20-seitiger Artikel sein, aber das Feedback könnte sie dazu bringen, proaktiver in die Zukunft zu gehen.]
Wenn Sie in Bezug auf eine vorhandene Lösung ein Leistungsproblem haben oder Hardware aktualisieren möchten, sollten Sie Informationen über die aktuelle Umgebung erfassen, um eine neue zu planen.
Speicherung
Planung für den Betrag Der benötigte Speicher ist ziemlich einfach, es erfordert nur etwas Planung im Voraus. In meinen Artikeln zur proaktiven SQL Server-Zustandsprüfung erläutere ich die Überwachung des Speicherplatzes und füge eine Abfrage zum Erfassen von Dateiinformationen hinzu. Diese Abfrage erfasst die Größe der Datenbankdateien für die Instanz sowie den verwendeten Speicherplatz. Es ist zwingend erforderlich, diese Daten im Laufe der Zeit zu trenden, und das bedeutet nicht ein paar Wochen. Sie möchten sehen, wie sich die Dateien über Monate hinweg ändern, möglicherweise über ein bis zwei Jahre, da sich die Nutzungsmuster für eine Anwendung ändern können. Diese Informationen sind leicht zu erfassen, benötigen wenig Platz zum Speichern und sind als Referenz bei der Beschaffung von Speicher von unschätzbarem Wert. Wenn Sie quantitative Daten über das Wachstum des Systems bereitstellen können, haben Sie eine viel bessere Chance, den benötigten Platz im Voraus zu bekommen, als später danach fragen zu müssen. Und wenn Sie nach Speicherplatz fragen, stellen Sie sicher, dass Sie tempdb in Ihre Berechnungen einbeziehen.
Hardwareressourcen
Prozessor
Bei der Optimierung Ihrer CPU-Leistung geht es nicht nur um die Anzahl der CPUs, die Sie haben, Sie müssen auch das Modell und die Arbeitslast berücksichtigen (z. B. Data Warehouse mit großen parallelen Abfragen vs. OLTP mit seriellen Abfragen). Mit diesen Informationen und ein wenig Hilfe von Glenn können Sie den besten Prozessor für Ihren Server bestimmen. Vergessen Sie nicht, die Lizenzkosten und -beschränkungen basierend auf Ihrer Edition von SQL Server zu berücksichtigen!
Erinnerung
Arbeitsspeicher ist relativ günstig und es ist unsere Empfehlung, immer die maximale Arbeitsspeichermenge zu kaufen, die ein Server aufnehmen kann. Das Lesen von Daten aus dem Speicher ist wesentlich schneller als das Lesen von der Festplatte. Je mehr Daten also in den Speicher passen, desto besser. Beachten Sie, dass die gesamte Datenbank nicht verfügt ins Gedächtnis passen. Sie brauchen nur den Arbeitsdatensatz, um in den Speicher zu passen. Betrachten Sie eine 2-TB-Datenbank. Es ist unwahrscheinlich, dass in einem OLTP-Szenario jeden Tag auf alle 2 TB zugegriffen wird. In der Regel wird nur auf aktuelle Daten zugegriffen – vielleicht nur die letzten 30 oder 60 Tage. Das sind die Daten, die in den Speicher passen müssen. Aber natürlich sehen wir selten eine reine OLTP-Umgebung, oft ist es eine gemischte Umgebung, weil Benutzer gerne Berichte über große Datensätze ausführen und es kein Data Warehouse oder keine Berichtskopie der Datenbank gibt, also haben um die Berichte gegen die Produktion laufen zu lassen. Dies verkompliziert den Speicherbedarf. Nun, manchmal brauchen Sie diese älteren Daten im Speicher, aber manchmal nicht. Es ist wichtig, die Arbeitsbelastung zu verstehen; Welche Arten von Abfragen werden für die Datenbank ausgeführt?
Wenn Sie die Standard Edition verwenden, vergewissern Sie sich, dass auf dem Server mehr Arbeitsspeicher vorhanden ist als der maximal unterstützte Arbeitsspeicher. Beispielsweise beträgt bei SQL Server 2014 und höher in der Standard Edition die maximale Speichermenge, die Sie dem Pufferpool zuweisen können (über die Einstellung max server memory), 128 GB. Daher möchten Sie mehr Speicher auf dem Server haben (z. B. 160 GB), damit Sie den maximalen Serverspeicher auf den höchstmöglichen Wert von 128 GB festlegen können und immer noch Speicher für das Betriebssystem und andere SQL Server-Prozesse verfügbar haben. Darüber hinaus können Sie mit SQL Server 2016 SP1 Standard Edition In-Memory OLTP mit einem Limit von 32 GB pro Datenbank verwenden. Dies liegt über dem Wert für den maximalen Serverspeicher. Wenn Sie also vorhaben, diese Funktion zu verwenden, kaufen Sie entsprechend Speicher.
Speicherung
Wenn wir über Leistungsanforderungen für Speicher sprechen, hört man oft von IOPS (Eingabe-/Ausgabeoperationen pro Sekunde). Tatsächlich wurde dieser Artikel von einer Frage eines Zuschauers inspiriert, der meinen Pluralsight-Kurs zu Benchmarking und Baselining gesehen hat. Die Frage lautete:„Wie korrelieren Sie die Performance Monitor-Zähler für Lese- und Schreibvorgänge pro Sekunde mit Benutzerverbindungen, um die Anzahl der IOs pro Benutzer abzuschätzen?“ Lese- und Schreibvorgänge pro Sekunde sind die Ein-/Ausgabevorgänge, daher stehen uns diese Daten über PerfMon auf Instanzebene zur Verfügung, und Sie verwenden sie, um die IOPS-Anforderungen für eine Instanz zu definieren.
Allerdings, wenn Sie wissen, liest und schreibt und Benutzerverbindungen, dann können Sie etwas rechnen und die IOPS pro Benutzer ermitteln. Dies ist nützlich, wenn Sie die Lösung erweitern und weitere Benutzer hinzufügen möchten. Sie möchten sicherstellen, dass die Lösung skalierbar ist, und eine Option, die Sie haben, besteht darin, Ihre berechneten IOPS pro Benutzer basierend auf der Anzahl X von Benutzern zu nehmen und dann die Instanz-IOPS für die Anzahl von Y Benutzern zu schätzen. Nun treffen wir bei dieser Berechnung viele Annahmen. Wir gehen davon aus, dass die Art und Weise, wie neue Verbindungen das System nutzen, die gleiche ist wie heute – das kann am Ende der Fall sein oder nicht, Sie werden es nicht wissen, bis das System vorhanden ist. Wenn Sie diesen Wert verstehen (Lesevorgänge + Schreibvorgänge/Benutzerverbindungen =durchschnittliche IOPS pro Benutzer), wissen Sie, wie Sie die IOPS für eine Lösung basierend auf erwarteten Benutzerverbindungen schätzen.
Sie bringen diese Informationen dann zu Ihrem Lagermitarbeiter, um die möglichen verfügbaren Konfigurationen zu besprechen. Sie können die maximalen IOPS für eine Festplattenkonfiguration berechnen, vorausgesetzt, Sie haben Informationen zu den Festplatten (z. B. die Anzahl der Festplatten, die Geschwindigkeit, die Größe und die RAID-Konfiguration). Sie können den E/A-Durchsatz für ein Laufwerk mit CrystalDiskMark testen, obwohl dies möglicherweise nicht möglich ist, wenn der Speicher noch nicht festgelegt wurde. Sobald es jedoch eingerichtet ist, sollten Sie diesen Test durchführen, um sicherzustellen, dass die IOPS für ein bestimmtes Laufwerk die erwartete Arbeitslast bewältigen können.
IOPS sind nur eine Möglichkeit, die Speicherleistung zu betrachten. Verstehen Sie, dass diese Daten Ihnen sagen, wie viel IO auftritt, und im Idealfall sollte die Latenz minimal sein, wenn Sie IOPS kennen und über den Speicher verfügen, um die Anforderungen zu erfüllen. Aber die Latenz beeinflusst die Leistung. Um festzustellen, welche Latenz vorhanden ist, müssen Sie ein Tool wie DiskSpd verwenden, um den Speicher zu bewerten. Glenn hat einen großartigen Artikel, der erklärt, wie man die IO-Leistung analysiert, und dann einen weiteren Artikel darüber, wie man DiskSpd zum Testen verwendet, um die Latenz zu verstehen. Ich empfehle dringend, beide Artikel zu lesen, wenn Sie sich zuvor noch nicht mit Speicher und Leistung befasst haben.
Schlussfolgerung
Bei der Kapazitätsplanung geht es um mehr als nur darum, zu wissen, wie viel Speicherplatz Sie für Datenbankdateien benötigen. Sie müssen die Arbeitslast verstehen und wissen, was sie in Bezug auf CPU-, Arbeitsspeicher- und Festplattenressourcen erfordert. Dazu benötigen Sie Daten … was bedeutet, dass Sie Baselines erfassen müssen. Meine allererste Sitzung in der SQL Server-Community fand im Dezember 2010 zum Thema Baselines statt. Sechs Jahre später spreche ich immer noch über ihre Bedeutung, und ich höre immer noch von Leuten, dass sie diese Zahlen nicht haben. Wenn Sie eine intelligente, zielgerichtete Kapazitätsplanung durchführen möchten, müssen Sie die entsprechenden Daten sammeln … sonst raten Sie nur.