Allgemeine Speicheranforderungen für SQL Server 2008 R2

11

Ich habe keine Erfahrung mit DBA-Arbeit, aber ich versuche, zusätzliche Ressourcen für unseren SQL-Server anzufordern, und hoffte, dass ich einige kluge Leute dazu bringen könnte, eine grobe Schätzung dessen abzugeben, was wir ausführen sollten. Ich vermute, dass die Zuweisung von Ressourcen, die die IT unserem Produktions-SQL-Server zur Verfügung gestellt hat, gering ist.

Hardware Software:

Datenbank: SQL Server 2008 R2 Unternehmensdatenbank

Windows: Windows 2008 r2 Enterprise 64-Bit, ziemlich sicher unter VMware.

Prozessor: Intel (R) Xeon (R) CPU E7-4860 bei 2,27 GHz 2,26 GHz (2 Prozessoren)

Installierter Speicher: 4 GB

Festplatte für Datenbankdateien: 300 GB

Festplatte für Backups: 150 GB

Festplatte für Protokolle: 100 GB

Anwendung:

Wir haben 3 Hauptdatenbanken mit einer Datenmenge von ca. 170 GB, eine Reporting Services-Datenbank (SSRS) auf demselben Server, auf der möglicherweise 10 verschiedene Berichte (mit durchschnittlich jeweils 700.000 Datensätzen) gespeichert sind, die täglich generiert werden. Unsere Benutzerbasis besteht aus ungefähr 20 gleichzeitigen Benutzern, von denen möglicherweise 5 als "ressourcenintensiv" angesehen werden können, wenn große Berichte erstellt werden, die Daten verarbeiten. Die Mehrheit der Benutzer interagiert mit der Datenbank über die asp.net-Website und die Berichtsserver-Website. Darüber hinaus verwenden unsere Entwickler SSIS in BIDS ausgiebig, indem sie direkt auf den Server remoten (max. 2 Remoteverbindungen). Schließlich haben wir einen ziemlich komplizierten Data Warehousing-Vorgang, der wahrscheinlich 3 Millionen Datensätze pro Tag über SSIS-Pakete einbringt, die auch auf dem Server ausgeführt werden.

Aktuelle Probleme:

Wir haben chronische Server-Timeouts und die Antwortzeit auf die Website ist ziemlich schlecht. Ich vermute, dass die Menge an Speicher (4 GB) wahrscheinlich ein großer Engpass ist. Unsere früheren Anforderungen an zusätzlichen Speicher wurden mit der allgemeinen Antwort abgelehnt, dass wir mehr Abfrageoptimierungen durchführen müssen. Wir sind zwar keine SQL-Profis oder (wie Sie sicher an unserem Setup erkennen können) DB-Admin-Profis, aber ich möchte sicherstellen, dass ich nicht meine ganze Zeit damit verbringe, wenig potenzielle Leistung herauszuholen, wenn die Hardware die ist Engpass.

Vielen Dank für die Vermeidung!

RMuesi
quelle
7
Sie erwarten, 170 GB Daten mit 4 GB Speicher zu versorgen? Keine Abfrageoptimierung wird das beheben, und sie sind nicht mehr in ihrem Baum.
Aaron Bertrand
Zeigen Sie ihnen die Zahlen (Leistungsstatistiken). Sie können ihnen auch die Microsoft-Dokumentation anzeigen, in der der Mindestspeicher für Windows Server 2008 R2 4 GB beträgt. Dies lässt nicht viel für SQL Server.
2
Was zeigen deine Wartestatistiken? Ich vermute, Sie sehen viele PAGEIOLATCH_XX, die auf Ihre Anfragen warten. Wenn ja, können Sie dies möglicherweise als Beweis dafür verwenden, dass zusätzlicher Speicher von Vorteil ist.
SQLRockstar
2
Und wenn Sie Speicher haben, können Sie mit der Arbeit an einem besseren E / A-Subsystem beginnen. Hard DRIVE für eine gut genutzte Datenbank ist ein IOPS-Witz. Das sollte fahren. Sie kaufen Laufwerk nicht als Kapazität, für Datenbanken kaufen Sie Laufwerk als IOPS-Quelle. Was bedeutet, dass eine 512-GB-SSD für die Datenbankdateien gut wäre. Standard "Lass es groß und billig werden" wird die Datenbank töten.
TomTom
@ TomTom Ich bin sicher (ich hoffe), wir haben ein Raid-Array. Ich bin mir allerdings nicht sicher, wie ich es erkennen soll. Ich habe die Festplattenbeschreibung nur auf das gestützt, was der Computerfenster-Explorer auf dem Windows-Server anzeigt.
RMuesi

Antworten:

14

... hatte gehofft, ich könnte ... eine grobe Schätzung dessen bekommen, was wir laufen sollten.

Ohne weitere Informationen zu Ihren Abfragen und Datengrößen ist es wirklich schwierig, Ihnen eine Schätzung zu geben, geschweige denn eine genaue Schätzung.

Datenbank: SQL Server 2008 R2 Unternehmensdatenbank

Windows: Windows 2008 r2 Enterprise 64-Bit, ziemlich sicher unter VMware.

Prozessor: Intel (R) Xeon (R) CPU E7-4860 bei 2,27 GHz 2,26 GHz (2 Prozessoren)

Installierter Speicher: 4 GB

Zwei Prozessoren (ich gehe davon aus, dass dies in der VM als 2 Kerne verfügbar ist) sind möglicherweise nicht ausreichend bereitgestellt. Die einer VM zugewiesenen Kerne sind nicht unbedingt direkt physischen Kernen zugeordnet (oder dürfen bei Bedarf sogar 100% eines einzelnen Kerns verwenden!). Daher ist dies möglicherweise eine flexiblere Ressource als Speicher. Ohne weitere Informationen zu Ihrer Workload oder Hardware- / Virtualisierungskonfiguration würde ich sagen, dass es schön wäre, diese auf 4 zu erhöhen.

Speicherzuweisung. Oh Junge. Dies ist grob für die Arbeitsbelastung unter bereitgestellt. Windows selbst benötigt mindestens 2-3 GB, um zufrieden zu sein, und jeder der beiden Benutzer, die BIDS auf der Box ausführen, benötigt jeweils mindestens 500 MB. Damit ist die Box bereits voll und ich habe noch nicht einmal herausgefunden, wie viel die Datenbank benötigen wird.

Die Mehrheit der Benutzer interagiert mit der Datenbank über die asp.net-Website und die Berichtsserver-Website.

Sie haben es nicht gesagt, aber wenn diese auf derselben Box ausgeführt werden, müssen auch die Speicheranforderungen für sie berücksichtigt werden.

Schließlich haben wir einen ziemlich komplizierten Data Warehousing-Vorgang, der wahrscheinlich 3 Millionen Datensätze pro Tag über SSIS-Pakete einbringt, die auch auf dem Server ausgeführt werden.

Angenommen, dies wird nachts ausgeführt, wenn sich keine Live-Benutzer auf dem System befinden, sehe ich dies nicht als Problem an, es sei denn, die Ausführung dauert zu lange. Dieser Teil der Dinge ist die geringste Ihrer Sorgen; Live-Benutzer sind wichtiger.

Unsere früheren Anforderungen an zusätzlichen Speicher wurden mit der allgemeinen Antwort abgelehnt, dass wir mehr Abfrageoptimierungen durchführen müssen.

Wie ich oben gezeigt habe, ist die derzeit bereitgestellte Speichermenge völlig unzureichend. Gleichzeitig ist es jedoch äußerst unwahrscheinlich, dass Sie am anderen Ende des Spektrums genügend Speicher bereitstellen können, um den Speicher zu behalten gesamte Datenbank auf einmal im Speicher .

Auch wenn Sie eine pauschale Antwort wie diese erhalten haben (was übrigens wahrscheinlich mehr damit zu tun hat, wie überzeugend Ihre Rechtfertigung für zusätzliche Ressourcen war, und nicht mit der tatsächlichen Ressourcennutzung selbst), ist es sehr wahrscheinlich, dass die Effizienz der Datenbank sein könnte verbessert. Es gibt jedoch keine Optimierung allein, mit der die Probleme behoben werden können, die derzeit auftreten. Der Vorschlag dafür ist für mich ein völliger Nichtstarter.

Ich würde den Gesamtansatz verfolgen, dass die derzeit bereitgestellte Speichermenge unter dem erforderlichen Mindestwert liegt (der so schnell wie möglich korrigiert werden sollte), und dass möglicherweise zusätzliche Ressourcen erforderlich sind, um die Benutzererfahrung auf ein nutzbares Niveau zu verbessern, während Verbesserungen vorgenommen werden, um die Effizienz von zu steigern die Systeme.

Hier sind einige Gedanken (in der Reihenfolge des Angriffs):

  • Sie werden gewinnen, wenn Sie nachweisen können, wie viel Leistung sich jedes Mal verbessert, wenn Sie mehr Ressourcen bereitstellen. Verfolgen Sie die Leistungsmetriken mithilfe der Protokollierung des Leistungsmonitors (Hinweis: Der Protokollierungsteil ist sehr wichtig), einschließlich der Antwortzeiten der Website, wenn Sie können. Beginnen Sie jetzt damit , bevor Sie etwas anderes tun. Wenn Sie endlich die minimale Speichermenge erreicht haben (Sie werden nicht sofort 32 GB erhalten), haben Sie plötzlich Beweise dafür, dass der hinzugefügte Speicher die Dinge verbessert hat ... was bedeutet, dass das Hinzufügen von noch mehr wahrscheinlich auch helfen würde! Wenn Sie keine Basislinie für die aktuelle Konfiguration erfassen, werden Sie das Boot verpassen, wenn die Dinge auf das empfohlene Mindestniveau gebracht werden.

  • Analysieren Sie Ihre Server - Warte Statistiken . Hier erfahren Sie, was der größte Engpass im System ist. Sie haben wahrscheinlich PAGEIOLATCH_XXdie häufigste / höchste Wartezeit, was darauf hinweist, dass zu viel E / A ausgeführt wird, um Seiten von der Festplatte abzurufen. Dies kann durch Hinzufügen von Speicher verringert werden, sodass die physischen E / A weniger häufig werden, da sich die benötigten Daten bereits im Speicher befinden. Während diese Analyse so ziemlich eine Selbstverständlichkeit ist, gibt Ihnen die Tatsache, dass Sie diese Statistiken überhaupt gesammelt haben, mehr Munition, wenn Sie den Bedarf an Ressourcen rechtfertigen.

  • Wie oben erwähnt, wird die Mindestanforderung an den Speicher nicht erfüllt. Sammeln Sie die empfohlenen Hardwareanforderungen für die gesamte Software, die Sie ausführen, und erstellen Sie möglicherweise auch Screenshots des Task-Managers. Dies allein sollte ausreichen, um vor Ort mindestens 4-8 GB mehr zu rechtfertigen. Wenn sie sich immer noch weigern, versuchen Sie, sie davon zu überzeugen, dass Sie es eine Woche lang ausprobieren können, und geben Sie es danach zurück (Sie sammeln Leistungsstatistiken, sodass Sie es nicht zurückgeben müssen, weil Sie es Mitte der Woche sind. ' Ich werde beweisen können, um wie viel sich die Situation verbessert hat. Wenn sie sich immer noch weigern, werden Sie zum Scheitern verurteilt. URLT .

  • Wenn Sie einen Teil der Arbeitslast auslagern können (insbesondere ein Remoting nach Möglichkeit vermeiden), erhöht dies den für die Datenbank verfügbaren Speicher, was kritischer ist.

  • Sie können nicht die gesamte Datenbank auf einmal in den Speicher einpassen. Dies bedeutet, dass Sie die maximale Speichereinstellung von SQL Server sehr sorgfältig festlegen müssen, um ein Überschreiben des Speichers zu vermeiden , wodurch die Leistung wie nichts anderes beeinträchtigt wird . Over-Commit ist sogar noch schlimmer, als einfach nicht alle Daten im Speicher unterzubringen. Es ist sehr wahrscheinlich, dass Sie sich gerade in diesem Szenario befinden, nur weil überhaupt kein Speicher verfügbar ist und es wahrscheinlich ist, dass die maximale Speichereinstellung auf den Standardwert (unbegrenzt) eingestellt ist.

  • Da Sie SQL Server Enterprise Edition ausführen und der Arbeitsspeicher knapp ist, würde ich die Implementierung der Datenkomprimierung dringend in Betracht ziehen . Dies führt zu einer Erhöhung der CPU-Auslastung, um Speicherplatz zu sparen (und damit die Festplattenzugriffe zu verringern, die vergleichsweise sehr langsam sind).

  • Optimieren Sie die Datenbank. Es ist wahrscheinlich, dass die Strukturen und Abfragen Verbesserungen in Bezug auf Indizierungs- und Zugriffsmuster gebrauchen könnten. Wenn viele Daten häufig gescannt und aggregiert werden, kann das Erstellen indizierter Ansichten, Übersichtstabellen oder vorberechneter Berichte sehr hilfreich sein.

  • Dies kann ein Longshot sein, da es wahrscheinlich mehr Hardware-Bereitstellung bedeutet, aber eine Caching-Lösung implementiert. Die schnellste Abfrage ist die, die Sie nie stellen .

Das sind nur ein paar Ideen. Das Fazit ist, dass das Tuning allein weder die Probleme hier noch die Hardware allein lösen wird, obwohl letztere wahrscheinlich die Mehrheit der unmittelbaren Probleme lindern wird. So geht das wirklich: Werfen Sie kurzfristig Hardware auf das Problem, um das Feuer zu löschen, und werfen Sie langfristig eine Optimierung auf das Problem, um die Grundursache so gut wie möglich zu beheben.

Jon Seigel
quelle
1
John, ich liebe deine Antwort und +1, aber in diesem Szenario scheint es, als würde Aarons Kommentar ihn auf den Kopf treffen und sie brauchen einfach mehr RAM, unabhängig davon, wie sehr sie versuchen, ihn zu stimmen.
Ali Razeghi
2
@Ali: Ja, ich stimme zu und ich habe das in meiner Antwort erwähnt. Meistens wollte ich mich auf Strategien konzentrieren , um mehr RAM zu bekommen, weil das hier das Problem zu sein scheint. (Wenn es einfach nicht verfügbar ist , ist das eine separate Ausgabe.)
Jon Seigel
Vielen Dank für die ausführliche Antwort! Ich bin neu in der Datenbank-Leistungsoptimierung, also versuche ich nur zu verstehen, wo ich anfangen soll. Ich habe etwas Lesematerial und einen Leistungsmonitor, jetzt muss ich nur noch die Metriken verstehen. Ihre Vorschläge bieten jedoch eine gute Roadmap für die Lösung dieses Problems. Danke noch einmal.
RMuesi
@ RMuesi: Gern geschehen. Wenn Sie spezielle Fragen dazu haben, wie Sie das erreichen können, was Sie tun müssen, können Sie diese gerne posten (bitte zuerst suchen). Die Community hilft Ihnen gerne weiter.
Jon Seigel
9

Dies ist der 'Bean Counter'-Wahnsinn. Die $ 1100- $ 2500, die Sie für RAM ausgeben würden, könnten sich innerhalb einer Woche amortisieren !

Sie haben eine Auszeit für 20 Mitarbeiter und 5 von ihnen leisten „ressourcenintensive“ Arbeit. Ich würde mir vorstellen, dass ihre Zeit nicht billig ist, und einige dieser Berichte sind diejenigen, die der Chef, der sich nicht auf dem Gehaltsscheck abmeldet, lieben würde. Das sind Tonnen verschwendeter Verschwendung, die erneut übertragen und mit Frustration umgehen.

Erklären Sie ihnen, dass sie wahrscheinlich 15 bis 20 US-Dollar pro GB für RAM benötigen. 128 GB RAM wären derzeit ungefähr 2200 bis 2500 US-Dollar, und die RAM-Preise sind derzeit etwas gestiegen. Selbst wenn Ihr Server-Motherboard dies nicht unterstützen kann (das wäre seltsam), wären 64 GB 1100 bis 1200 US-Dollar (ich habe es gerade überprüft, und das ist die Server-RAM-Qualität von Dell, ohne dass Rabatte angewendet werden). Nur 64 GB RAM können einen RIESIGEN Unterschied machen (insbesondere, wenn wir sicherstellen, dass Tabellen-Scans großer Tabellen vermieden werden).

Finden Sie heraus, wie viel Zeit verschwendet wird, und fragen Sie sie, ob es 1100 bis 2500 US-Dollar wert ist. Wenn Sie nur 1100 US-Dollar ausgeben und 64 GB RAM erhalten, vermeiden Sie Tabellenscans auf großen Tischen. Verwenden Sie mehr Festplatten mit Indizes (wenn Sie die Latenz haben, um dies zu unterstützen), um zu vermeiden, dass große Scans Speicher speichern.

Ali Razeghi
quelle
5
Gut gesagt für den Wahnsinn. 4 GB Speicher sind weniger als ich heutzutage für einen Desktop vorschlagen würde. Und das versucht jetzt, in einer 170-GB-Datenbankumgebung ausgeführt zu werden. Verdammter Witz. Aber hey, Virtualisierung für Beancounters bedeutet, dass Sie die großen teuren Server loswerden können;)
TomTom
2
Stimme voll und ganz zu. Zumindest die Bohnenzähler in OPs Szenario hatten ihre Krallen vom physischen Server entfernt (hoffentlich!)
Ali Razeghi
1
glaube es. Ich nicht. TYPISCH wäre ein Server mit viel RAM und - LAAAAARGE billigen Discs. Sie können also eine Menge virtueller Maschinen darauf ausführen. Schließlich ist RAM normalerweise der begrenzende Faktor, nicht wahr;)? Das Ergebnis wird eine enorme IOPS-Leistung sein - auch ohne Datenbank. War schon da, habe das gesehen. 64 GB Speicher, 2 TB Spiegel SATA-Disc;)
TomTom
Danke für die Antwort. Ich habe das vermutet, habe aber nicht die Daten, um zu beweisen, dass das Problem teilweise Hardware-Imitationen sind. Daran arbeite ich jetzt.
RMuesi
2
Vielleicht möchten Sie sie nur wissen lassen, dass SQL Server ein In-Memory-Datenbankmodul ist. Das Lesen von der Festplatte, selbst SSDs (von denen ich mir ziemlich sicher bin, dass sie in diesem Shop nicht verwendet werden), sind schmerzlich langsam. Ein Lesevorgang aus dem RAM dauert ca. 5 ns. Zeigen Sie ihnen mit SET STATISTICSIO ON einen Ausführungsplan, der das Scannen und Lesen von Tabellen zeigt. Zeigen Sie ihnen die physischen und logischen Lesevorgänge. Physische wird von der Festplatte durchgeführt.
Ali Razeghi
-1

Ich verwende 2008 R2 mit 46 GB RAM. Keine virtuellen Maschinen. SQL Server 2008.

Datenbanken haben ungefähr 300 GB.

Ich habe die Datenbanken kürzlich auf ein Solid-State-Laufwerk gestellt und meine Datenausgabe verdreifacht.

Der Server verwendet derzeit 45 GB RAM und läuft einwandfrei.

FC Sata Raids und SAS SCSI Raids. Insgesamt 26 logische Laufwerke. 144 Drehscheiben.

Gestern habe ich nur 24 GB RAM verwendet, als ich nur 50 TB volle Festplatten angeschlossen hatte und Daten übertrug. Heute habe ich 160 TB volle Festplatten und ich benutze 45 GB RAM.

Meine Anwendung verwendet nicht mehr als 400 MB RAM.

Ich würde vermuten, dass Sie die Datenbanken auf einem schnellen Solid-State-Laufwerk oder RAM-Laufwerk benötigen. Grundsätzlich braucht man aber viel mehr RAM.

David
quelle
IBM exFlash 400 GB MCS $ 4400. Dorthin gehe ich.
David