Warum verbraucht SQL Server 2014 so viel RAM, ohne dass aktive Daten gespeichert sind?

7

Ich verwende SQL Server 2014 auf meinem Laptop zusammen mit einer Menge anderer installierter Anwendungen, von Visual Studio bis hin zu Videospielen.

Dies ist offensichtlich kein Produktionsserver, sondern nur zum Entwickeln und Debuggen.

Ich habe eine ziemlich kleine und einfache Datenbank mit ein paar Dutzend Tabellen und Ansichten erstellt - und weniger als 100 Zeilen Dummy-Daten zum Testen eingefügt.

Irgendwann habe ich versehentlich einen Index mit mehr als 100 GB erstellt, wobei einige schlecht geformte Cross-Joins verwendet wurden. Die Abfrage, mit der dieser Index erstellt wurde, verbrauchte 100% des Arbeitsspeichers in meinem Laptop (16 GB), wodurch alles zum Crawlen verlangsamt wurde. Daher habe ich die Abfrage abgebrochen und nicht Warten Sie, bis der Vorgang abgeschlossen ist, und löschen Sie dann umgehend die gesamte Datenbank, wobei dieser Index aus den Erstellungsskripten entfernt wird.

Von diesem Zeitpunkt an verbrauchte SQL Server 2014 jedoch weiterhin alle 16 GB meines Arbeitsspeichers, selbst wenn die Abfrage abgebrochen und die Datenbank gelöscht wurde.

Also habe ich meinen Laptop als nächstes neu gestartet und die RAM-Auslastung für SQL Server ist auf 7 GB gesunken - wo sie seitdem geblieben ist, unabhängig davon, ob ich alle 5 MB vorhandener Datenbanken usw. lösche oder nicht.

Ich möchte SQL Server wieder auf einen angemessenen Speicherverbrauch bringen, weiß aber nicht, wo ich nach möglichen Ursachen suchen soll.

Ich weiß, dass dies eine ziemlich offene Frage ist, aber ich bin bereit, die Beinarbeit mit ein wenig Anleitung zu erledigen.

Ich weiß nur nicht, wo ich mit der Fehlerbehebung beginnen soll, da ich selbst kein DBA bin - und anscheinend weiß Google es auch nicht. :) :)

Giffyguy
quelle
2
Haben Sie versucht, den maximalen Serverspeicher einzustellen? SQL belegt standardmäßig den gesamten Speicher, wenn Sie ihn nicht einschränken.
Kris Gruttemeyer
@KrisGruttemeyer Danke für den Tipp, ich werde das googeln und sehen, ob ich herausfinden kann, wie man ein angemessenes Speicherlimit festlegt.
Giffyguy

Antworten:

6

Als erstes müssen Sie die maximale Speichereinstellung auf Ihrer Instanz entweder über die GUI oder über sp_configure ändern .

EXEC sp_configure 'max server memory (MB)', 1024

Gehen Sie dann in SQL Server Configuration Manager und stoppen Sie die Instanz und starten Sie sie neu. Sie müssen Ihren Laptop nicht neu starten.

Dadurch wird das Problem behoben, sodass Ihre Instanz nicht viel mehr als 1 GB verwendet. Ich bin mir ziemlich sicher, dass Speicher verwendet wird, der in dieser Einstellung nicht enthalten ist, aber keine große Menge.

SQL Server nimmt gerne Speicher für das, was es benötigt. Es ist nicht so gut, es zurückzugeben, daher ist es eine gute Idee, die maximale Speichereinstellung auf Ihrem persönlichen Laptop ziemlich niedrig zu halten, es sei denn, Sie benötigen zufällig mehr. Ich verwende die 1-GB-Einstellung für zufällige kleine Abfragen usw. und wenn ich mehr benötige, aktualisiere ich sie. Natürlich hat mein Laptop insgesamt nur 6 GB RAM.

Kenneth Fisher
quelle
2
Das hat wie ein Zauber gewirkt. Ich musste den Dienst überhaupt nicht neu starten. Ich habe gerade den maximalen Speicher in SSMS auf 512 MB geändert und dann in meinem Task-Manager-Fenster beobachtet, wie die Speichernutzung fast sofort auf 380 MB gesunken ist. Zweifellos hielt SQL Server nur den Speicher
bereit, um
1
@Giffyguy benutze niemals den Task-Manager, es ist ein großer Lügner. Siehe diese Antwort .
Aaron Bertrand
1
Vergessen Sie nicht, wenn Sie Ihren maximalen Speicher zu niedrig einstellen, können Probleme beim Ausführen von Testabfragen auftreten. Sie können den Start auch in SQL Server Configuration Manager auf "manuell" setzen und die Instanz nur dann starten, wenn Sie sie benötigen.
Kenneth Fisher
@ AaronBertrand und Kenneth, danke für die tollen Infos. Ich werde diese Dinge im Auge behalten. Ihr wart eine große Hilfe.
Giffyguy
1
@Giffguy: FYI SQL Server kann mehr als das im maximalen Serverspeicher festgelegte Limit verwenden. Seien Sie also nicht überrascht, wenn SQL Server mehr als 512 MB verwendet. Um auf der sicheren Seite zu sein, würde ich vorschlagen, den maximalen Serverspeicher auf mindestens 3-4 G zu ändern. Oder Sie können ihn ändern, wenn Sie 512 MB testen. Das ist wirklich ein niedriger Wert
Shanky
4

SQL Server ist so konfiguriert, dass es auf diese Weise funktioniert. Es wird davon ausgegangen, dass Sie den Speicher erneut benötigen, wenn Sie ihn einmal benötigen. Es ist teuer, diesen Speicher ständig an das Betriebssystem zurückzugeben und erneut anzufordern. Warum also etwas an das Betriebssystem zurückgeben?

Die derzeit einfachste Lösung besteht darin, den SQL Server-Dienst einfach neu zu starten. Dadurch kehren Sie zu einer minimalen RAM-Auslastung zurück, die sich erst erhöht, wenn Sie erneut Daten / Indizes erstellen.

Sie sollten jedoch auch den maximalen Serverspeicher festlegen, wie Kris oben ausgeführt hat. Etwas weniger als 16 GB (Entschuldigung, dafür gibt es keine "richtige Antwort").

Aaron Bertrand
quelle
Genau das war los. SQL hielt den Speicher mit Vorfreude auf zukünftige Anforderungen fest. Ich habe den maximalen Speicher in SSMS auf 512 MB geändert und festgestellt, dass die Speichernutzung im Task-Manager sofort auf 380 MB gesunken ist. Ich musste den Dienst nicht einmal neu starten.
Giffyguy