Wie kann ich SQL Server-Speicher freigeben?

9

Ich habe eine SQL Server-Sandbox-Installation auf meinem lokalen Computer. Ich habe den Speicher festgelegt, den die SQL Server-Instanz auf 1000 MB verwenden kann. Bei einem intensiven Betrieb steigt die Speichernutzung auf bis zu 1000 MB. Wenn der Vorgang beendet ist, hält SQL Server immer noch den Speicher. Wie kann ich diese Speicherreservierung freigeben?

jrara
quelle
2
Was sind deine min server memoryund max server memory Einstellungen ? Sobald SQL Server das von Ihnen angegebene Minimum reserviert, wird es niemals freigegeben, es sei denn, Sie ändern die Einstellung oder bouncen die Instanz. Wie James bemerkte, sollte es theoretisch freigegeben werden, wenn es mehr als das von Ihnen angegebene Minimum reserviert, wenn es nicht benötigt wird und Speicherdruck auf der Maschine herrscht.
Nick Chammas
@Nick: min Serverspeicher: 0 (MB); Maximaler Serverspeicher: 600 (MB).
Jrara

Antworten:

13

Beenden / Starten des Dienstes, nichts anderes gibt den Speicher an das Betriebssystem zurück.

Offensichtlich nichts, was Sie jemals mit einem betriebsbereiten Server machen möchten, aber für eine lokale Sandbox durchaus vernünftig. Mit 3 verschiedenen Instanzen auf meinem Laptop ist dies der einzig praktikable Weg.

Bearbeiten Sie den folgenden Kommentar von @ Nick.

Wie James bemerkte, sollte es theoretisch freigegeben werden, wenn es mehr als das von Ihnen angegebene Minimum reserviert, wenn es nicht benötigt wird und Speicherdruck auf der Maschine herrscht.

Was ist Ihre Definition von "braucht es nicht"? Sobald der Pufferpool gefüllt ist, werden Seiten erst dann gelöscht, wenn sie durch das Einbringen anderer Seiten ungünstig werden. Wenn Sie den Speicher sofort zurückhaben möchten, wie dies bei @jrara der Fall ist, müssen Sie aufhören /Start.

Mark Storey-Smith
quelle
2
Per Microsoft : "Unter Windows Server 2003 verwendet SQL Server die Speicherbenachrichtigungs-API QueryMemoryResourceNotification, um zu bestimmen, wann der Pufferpool Speicher zuweisen und Speicher freigeben kann." Wenn Sie sich also nur Sorgen machen, andere Apps zu verhungern, die möglicherweise mehr Speicher benötigen, gibt SQL Server theoretisch Speicher frei, den Windows nicht benötigt, wenn Windows dies anweist. Der einzige Grund, warum Sie eine Freigabe durch Neustart der Instanz erzwingen müssen, besteht darin, dass dieser Mechanismus nicht wie vorgesehen funktioniert oder Ihre Min / Max-Speichereinstellungen falsch sind.
Nick Chammas
Ein weiterer nützlicher msdn-Artikel zur Verdeutlichung dieser msdn.microsoft.com/en-us/library/ms178145.aspx . Solange SQL Server die minimale Serverspeichereinstellung erreicht hat, wird der Speicher als Reaktion auf Benachrichtigungen über geringen Arbeitsspeicher vom Betriebssystem freigegeben. Nach meiner Erfahrung muss es allerdings ziemlich extrem sein, damit dies geschieht.
Georgeb
Genau @georgeb_dba, es wird es nicht ohne weiteres aufgeben. Ergo, stoppen / starten Sie und erhalten Sie sofort den begrenzten Speicher Ihres Laptops zurück.
Mark Storey-Smith
4
DBCC FREESYSTEMCACHE ('ALL') 
DBCC FREESESSIONCACHE
DBCC FREEPROCCACHE 

wird den Pool freigeben.

https://msdn.microsoft.com/en-us/library/ms178529.aspx

Bemerkungen

Durch Ausführen von DBCC FREESYSTEMCACHE wird der Plan-Cache für die Instanz von SQL Server gelöscht. Das Löschen des Plan-Cache führt zu einer Neukompilierung aller nachfolgenden Ausführungspläne und kann zu einer plötzlichen, vorübergehenden Verringerung der Abfrageleistung führen. Für jeden gelöschten Cachstore im Plan-Cache enthält das SQL Server-Fehlerprotokoll die folgende Informationsmeldung: "SQL Server hat% d Vorkommen von Cachestore-Flush für den Cachestore '% s' (Teil des Plan-Cache) aufgrund von festgestellt Operationen "DBCC FREEPROCCACHE" oder "DBCC FREESYSTEMCACHE". " Diese Nachricht wird alle fünf Minuten protokolliert, solange der Cache innerhalb dieses Zeitintervalls geleert wird.

Daniel Decasse
quelle
1
Ich bin mir ziemlich sicher, dass dies nicht die Menge an Speicher reduziert, die SQL auf Betriebssystemebene reserviert hat
Greg
3

Der nicht automatisch verwendete Speicher wird aufgegeben, da andere Apps versuchen, ihn festzuschreiben.

James Ryan
quelle