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!
Antworten:
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.
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.
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.
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.
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_XX
die 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.
quelle
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.
quelle
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.
quelle