Was ist ein guter Weg, um SQL Server dazu zu bringen, Speicher für das Betriebssystem auf einem Entwicklungscomputer freizugeben?

7

Auf meiner Entwicklungsbox habe ich meinen SQL Server mit einer hohen maximalen Speichermenge (8 GB von 16 GB) konfiguriert. Dies ist für viele Entwicklungsaufgaben erforderlich.

Manchmal möchte ich jedoch meine Erinnerung zurück. Ich möchte nicht, dass 8 GB dauerhaft verbraucht werden.

Was ist ein guter Weg, um SQL Server dazu zu bringen, plötzlich seinen gesamten Speicher für das Betriebssystem freizugeben?

DBCC DROPCLEANBUFFERSmacht das nicht . Es markiert lediglich saubere Puffer als verfügbar.

Das Neustarten von SQL Server ist ein Problem, da aufgrund dieses Fehlers / dieser Funktion eine 1-minütige Datenbankwiederherstellung ausgeführt wird: Wenn Sie den SQL Server-Dienst stoppen, werden die Datenbanken nicht ordnungsgemäß heruntergefahren (stimmen Sie für dieses Verbindungselement ab; dies scheint ein schwerwiegender Fehler zu sein). .

boot4life
quelle
Haben Sie darüber nachgedacht, den maximalen Serverspeicher zu ändern, wenn Sie das getan haben, was Sie damit tun? Sie können dies in einen Job oder eine Prozedur einfügen, damit Sie es nicht manuell ausführen müssen. Seien Sie auch nicht zu klein Über Neustarts. Ich starte SQL Server die ganze Zeit neu, aber ich verwende nicht das Applet "Systemsteuerung", sondern SQL Server Configuration Manager. Dies ist eine Entwicklungsbox, nicht eine Produktionsmaschine? Selbst wenn die Wiederherstellung beim Neustart des Dienstes eine ganze Minute dauert, ist dies wirklich ein Problem? Schließlich scheint der Fehler nur relevant zu sein, wenn Sie die Datenbank beim Herunterfahren aktiv verwenden ...
Aaron Bertrand
... was Sie wahrscheinlich vermeiden können, indem Sie einfach SSMS und / oder Ihre Apps herunterfahren, bevor Sie SQL Server neu starten.
Aaron Bertrand
(Fehler behoben). Das Problem bei der 1-minütigen Wiederherstellung ist, dass SQL Server die Festplatte gerne überfordert, wodurch im Grunde alles angehalten wird, was ich damit mache. Das Herunterfahren von Apps ist umständlich. Es gibt SSMS, das dafür berüchtigt ist, keine Verbindungen zuzulassen, und ASP.NET, das über einen Verbindungspool verfügt.
Boot4life
Ich werde versuchen, die maximale Speichereinstellung zu reduzieren. Dies hatte in der Vergangenheit schlimme Konsequenzen für mich. Es scheinen SQL Server-Fehler damit verbunden zu sein. Ich hatte Leistungsprobleme, nachdem ich die maximale Server-Speichervariable reduziert und dann erhöht hatte. Ich hatte auch Fragen, die auf unbestimmte Zeit auf Speicherzuschüsse warteten. Ich hatte auch Minuten von 1 Kern bei 100% CPU. SQL Server mag es nicht, wenn sein Speicher reduziert wird, denke ich. Dies scheint vom Entwicklerteam schlecht getestet zu werden.
Boot4life

Antworten:

15

Ich erhöhe und verkleinere routinemäßig die Konfigurationsoption für den maximalen Serverspeicher für die SQL Server 2005-2016-Instanzen, die auf meinem Laptop ausgeführt werden (mit aktivierten Sperrseiten im Speicher). Hat mir nie Probleme bereitet und der Speicher scheint immer schnell freigegeben zu werden. Ich stoppe, starte und starte Instanzen auch nach Bedarf, indem ich sie benötige (mit SQL Server Configuration Manager, den ich offen halte).

Wie Sie den Checkpoint konfigurieren, hängt von der Version ab . Ein manueller Prüfpunkt mit einem Dauerziel ist seit 2005 verfügbar (obwohl er in späteren Versionen zweifellos effektiver ist).

Durch Ausführen eines manuellen Prüfpunkts <duration>pro Datenbank vor dem Herunterfahren können Sie die E / A-Last verteilen und die Wiederherstellungszeit beim Start verkürzen. Durch verwaltetes Checkpointing wird auch die E / A reduziert, die erforderlich ist, wenn eine Speicherverkleinerung angefordert wird, da weniger schmutzige Seiten in den dauerhaften Speicher geschrieben werden müssen. Es hat keinen besonderen Vorteil, saubere Puffer zu löschen, bevor die maximale Speichereinstellung, die ich bemerkt habe, reduziert wird.

Wenn Sie "Seiten im Speicher sperren" nicht verwenden, kann dies die Rate erhöhen, mit der SQL Server Speicher freigeben kann. Ich verlasse mich jedoch darauf, um zu vermeiden, dass SQL Server-Speicher auf die Festplatte übertragen wird. Wenn Sie es für diesen Zweck nicht benötigen, können Sie es auch ohne ausführen.

Paul White 9
quelle
5

Manchmal möchte ich jedoch meine Erinnerung zurück. Ich möchte nicht, dass 8 GB dauerhaft verbraucht werden.

Was ist ein guter Weg, um SQL Server dazu zu bringen, plötzlich seinen gesamten Speicher für das Betriebssystem freizugeben?

DBCC DROPCLEANBUFFERS macht das nicht. Es markiert lediglich saubere Puffer als verfügbar.

Da Sie sagten, Sie möchten Speicher auf dem DEV-Computer freigeben, können Sie die folgende Abfrage verwenden

DBCC FREESYSTEMCACHE ('ALL') 
DBCC FREESESSIONCACHE
DBCC FREEPROCCACHE

Beachten Sie jedoch die obigen Befehle won't cause SQL Server process to release memory committed it would just clear caches. Das erleben Sie.

Nachdem Sie die obige Abfrage ausgeführt haben, können Sie den maximalen Server-Speicher von SQL Server auf einen niedrigeren Wert ändern (in Ihrem Fall 4-5 GB). Dadurch werden SQL Server-Prozesse gezwungen, Speicher freizugeben, und der Speicherverbrauch wird erneut gesenkt DEV-Maschine. Das Ändern des maximalen Serverspeichers erfordert keinen Neustart. Die andere Sache ist der Neustart des SQL Server-Dienstes. Dadurch werden die Caches definitiv gelöscht und der vom SQL Server-Prozess gehaltene Speicher wird freigegeben. Nach dem Neustart von SQL Server wird jedoch möglicherweise nach einiger Zeit der gesamte Speicherplatz beansprucht.

Shanky
quelle
-3

Beenden Sie den SQL Server-Dienst (MSSQLSERVER) und starten Sie ihn neu. Macht den Trick.

Krishna Khanna
quelle
2
Lesen Sie die Frage etwas genauer durch. Sie möchten den Server nicht neu starten. "Restarting SQL Server is a problem because this causes a 1 minute database recovery to be run"
Erik Darling