Wie kann die übermäßige Verwendung von RAM durch SQL Server gesteuert werden?

13

Auf dem von mir verwendeten Datenbankserver werden 6 verschiedene SQL Server-Instanzen ausgeführt. Es hat 48 GB RAM. Einer von ihnen verbraucht mehr als 10 GB RAM, der Gesamtverbrauch liegt derzeit bei 20 GB. Der RAM-Verbrauch wächst kontinuierlich. Einige Tage zuvor waren mehr als 40 GB RAM belegt und der Server reagierte sehr langsam. Die Anwendung zeigt die Absturzprobleme beim Speichern von Daten.

Also habe ich die SQL Server-Dienste neu gestartet.

Sobald die Dienste neu gestartet wurden, betrug die Auslastung nur noch 4 GB. Jetzt wächst sie. Und ich mache mir Sorgen, dass es in 4 oder 5 Tagen auf 40 GB anwächst und den Server langsam werden lässt.

Ein Neustart des Dienstes ist meiner Meinung nach keine gute Option.

Ich habe auch aus verschiedenen Quellen herausgefunden, dass wir die maximale Speicherauslastung für SQL Server festlegen können. Und ich bin mir nicht ganz sicher, ob dies helfen wird oder nicht. Ich kann dies nicht testen, da der Server die Produktionsdatenbank verwendet und es ein Risiko darstellt, wenn der Dienst beendet wird, während die Einstellung in SQL Server geändert wird.

Kann jemand bei diesem Problem helfen?


quelle
1
Standardmäßig verwendet SQL so viel RAM wie möglich, um die Leistung zu maximieren. Dies ist gut. Das bedeutet, dass allgemeine Abfragen und Ergebnisse zwischengespeichert werden, um Ihre Anwendung schneller zu machen. Es wird nur RAM verwendet, bis zu dem Grenzwert, an dem das Betriebssystem möglicherweise Paging meldet. Sie können dieses Verhalten außer Kraft setzen. Siehe diese MS-Dokumentation: So passen Sie die Speichernutzung mithilfe von Konfigurationsoptionen in SQL Server an Dies kann auch nützlich sein: So bestimmen Sie die richtigen SQL Server-Konfigurationseinstellungen
4
Es ist kein Problem - es ist das entworfene und Standardverhalten für SQL Server! Ja, ein Neustart des SQL Server-Prozesses ist eine schreckliche Idee. SQL Server speichert so viele Daten und Indexseiten wie möglich im Speicher. Auf diese Weise wird die Gesamtsystemleistung optimiert. Aus diesem Grund sollte ein SQL Server-Computer immer ein dedizierter Server sein - und nichts anderes als SQL Server tun.
Marc_s
Ja ich habe es verstanden. Es ist so konzipiert. Wenn der SQL Server jedoch einen Großteil des Speichers belegt, wird der Server langsamer und die Berichte erhalten eine Zeitüberschreitung. Ich möchte also verhindern, dass SQL Server begrenzten Speicher verwendet.
4
Eigentlich , wenn SQL Server verwendet so viel Speicher wie es kann, würde ich sagen , dass würde es weniger wahrscheinlich Schwierigkeiten liefert Berichte haben. Wenn Sie SQL Server künstlich einschränken (oder zu viele Instanzen auf eine Box setzen, die um Ressourcen konkurrieren), treten Probleme aufgrund von Speicherzuweisungen und anderen Problemen auf.
Aaron Bertrand
Aber ich frage mich, warum es plötzlich begann, die Berichte gut nach dem Neustart des SQL Server-Dienstes anzuzeigen. Kann es sein, dass zu viele Kunden die Anwendung verwendeten, aufgrund derer die Berichte nicht angezeigt wurden?

Antworten:

14

Das ist so gewollt. SQL Server soll den gesamten verfügbaren Arbeitsspeicher nutzen, da immer mehr Daten im Arbeitsspeicher gespeichert werden, sodass nicht immer wieder auf den Datenträger zugegriffen werden muss, um denselben Arbeitsspeicher zu erhalten.

Wenn Sie den von einer einzelnen SQL Server-Instanz verwendeten Arbeitsspeicher begrenzen müssen, können Sie dies in SQL Server Management Studio tun, indem Sie im Objekt-Explorer mit der rechten Maustaste auf den Instanznamen klicken und Eigenschaften auswählen. Wählen Sie dann die Registerkarte Speicher und legen Sie die maximale Speichermenge fest, die der SQL Server verwenden darf. Dies wird nicht alle Aspekte von SQL Server auf diese Speicherkapazität beschränken. Dies steuert nur den Pufferpool und den Ausführungsplan-Cache. Dinge wie CLR, Volltext, der von den SQL Server-Exe-Dateien, SQL Agent, erweiterten gespeicherten Prozeduren usw. verwendete tatsächliche Speicher werden von dieser Einstellung nicht gesteuert. Diese anderen Dinge benötigen jedoch normalerweise nicht so viel Speicher, da der Pufferpool und der Ausführungsplan-Cache den Großteil des Speichers benötigen.

Wenn Sie diese Einstellung für eine Instanz festlegen, möchten Sie sie für alle Instanzen festlegen, damit sie nicht aufeinander treten.

mrdenny
quelle