Ich verwende Microsoft SQL Server 2012 und versuche, eine einfache Abfrage in Management Studio auszuführen. Ich erhalte die folgende Fehlermeldung (in SSMS auf dem Server ausgeführt):
Beim Ausführen des Stapels ist ein Fehler aufgetreten. Fehlermeldung: Ausnahme vom Typ "System.OutOfMemoryException" wurde ausgelöst.
Auf dem System sind 24 GB RAM installiert, aber im Task-Manager verwendet der Prozess sqlservr.exe nur 2,9 GB.
Gibt es irgendwo eine Einstellung, die die RAM-Nutzung einschränkt?
Dieser Fehler weist darauf hin, dass Management Studio nicht über genügend Arbeitsspeicher verfügt, sondern über den SQL Server-Dienst. Selbst wenn Sie 64-Bit-SQL Server installiert haben, handelt es sich bei der ausführbaren SQL Server Management Studio-Datei um eine 32-Bit-Anwendung.
Dies liegt wahrscheinlich an der Größe der Ergebnismenge, die Sie an Management Studio zurückgeben. Führen Sie so etwas wie SELECT * FROM really_big_table aus? Weitere Informationen finden Sie unter http://support.microsoft.com/kb/2874903 .
Mike hat Recht, dass die Fehlermeldung, die Sie erhalten, von der Management Studio-Anwendung selbst und nicht von SQL Server stammt. Es ist der Speicher auf Ihrer lokalen Workstation, der erschöpft ist, wahrscheinlich weil versucht wurde, 16 Milliarden Zeilen in die Clientanwendung zu ziehen (das Rendern dieser Daten in einem Grid ist in Bezug auf den Speicher ziemlich teuer, also versuchen Sie, Ihre Abfragen mit TOPetc. Zu begrenzen Ich weiß nicht, welche praktischen Dinge Sie möglicherweise mit genügend Daten tun könnten, um ohnehin den gesamten lokalen Speicher zu belegen.
Ich möchte jedoch ein anderes Problem ansprechen: Verwenden des Task-Managers zum Ermitteln der von SQL Server verwendeten Speicherkapazität. Mach das nicht; Es ist ein mutiger Lügner. Kopieren von dieser Antwort (Ihre Frage ist zweifach, daher kann ich sie nicht wirklich als Duplikat schließen):
Sie können sich NIEMALS darauf verlassen, dass der Task-Manager Ihnen mitteilt, wie viel Speicher SQL Server verwendet. Verwenden Sie den Task-Manager in diesem Zeitraum nicht mehr. Leistungsindikator verwenden - Sie können den Leistungsindikator auch mit DMVs abfragen:
SELECT object_name, cntr_value FROM sys.dm_os_performance_countersWHERE counter_name ='Total Server Memory (KB)';
Sie können dies als Abfrageverknüpfung in Extras> Optionen> Umgebung> Tastatur> Abfrageverknüpfungen speichern und in einem Abfragefenster genaue Ergebnisse erhalten, viel schneller als ungenaue Ergebnisse vom Task-Manager.
Sie können auch anhand der folgenden Abfragen überprüfen, ob der Arbeitsspeicher belastet ist (und ob Sie etwas dagegen tun können):
SELECT object_name, cntr_valueFROM sys.dm_os_performance_countersWHERE counter_name IN('Total Server Memory (KB)','Target Server Memory (KB)');-- SQL Server 2012:SELECT physical_memory_kb FROM sys.dm_os_sys_info;-- Prior versions:SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;EXEC sp_configure 'max server memory';
Die obigen Befehle gelten für neue Versionen von SQL. Bei SQL 2008 R2-Servern unterscheiden sich die dortigen Befehle geringfügig. Ich füge diesem unteren Bereich einen weiteren Beitrag für diese Server hinzu, da nachfolgende Kommentare nicht gut genug formatiert sind, um sie hier
David Bridge,
15
Bei mir war es genauso. Mein SQL Server Management Studio war einige Tage geöffnet. Ich habe es neu gestartet und es wurde gelöst.
Ich fand es hilfreich, IntelliSense auszuschalten. Ich empfehle außerdem, alle von Ihnen verwendeten Add-Ins zu überprüfen (Dinge wie RedGate-Tools und ApexSQL haben das Problem für mich ebenfalls verschlimmert).
Dieses Problem plagte mich schon seit Tagen und ehrlich gesagt ist es ziemlich schwach von Microsoft. Sie sollten wirklich 64-Bit-Tool-Sets haben, da wir es heutzutage mit Big Data, 64-Bit-Servern und Desktop-Umgebungen zu tun haben.
In meinem Fall kämpfte RedGate SQL Prompt mit dem in Intellisense integrierten SSMS. Durch das Deaktivieren von SSMS Intellisense funktionierte SQL Prompt auch viel besser.
TTT
1
Für SQL 2008 R2 lauten die Speicherabfragebefehle (von Aaron Bertrands Beitrag) wie folgt
SELECT object_name, cntr_valueFROM sys.dm_os_performance_countersWHERE counter_name ='Total Server Memory (KB)';SELECT object_name, cntr_valueFROM sys.dm_os_performance_countersWHERE counter_name IN('Total Server Memory (KB)','Target Server Memory (KB)');-- SQL Server 2012:SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;-- Prior versions:SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;
Beachten Sie auch, dass der Befehl
EXEC sp_configure 'max server memory';
funktioniert möglicherweise nicht, es sei denn, Sie haben erweiterte Optionen aktiviert. zB mach das zuerst
Bei mir war es genauso. Mein SQL Server Management Studio war einige Tage geöffnet. Ich habe es neu gestartet und es wurde gelöst.
quelle
Ich fand es hilfreich, IntelliSense auszuschalten. Ich empfehle außerdem, alle von Ihnen verwendeten Add-Ins zu überprüfen (Dinge wie RedGate-Tools und ApexSQL haben das Problem für mich ebenfalls verschlimmert).
Dieses Problem plagte mich schon seit Tagen und ehrlich gesagt ist es ziemlich schwach von Microsoft. Sie sollten wirklich 64-Bit-Tool-Sets haben, da wir es heutzutage mit Big Data, 64-Bit-Servern und Desktop-Umgebungen zu tun haben.
quelle
Für SQL 2008 R2 lauten die Speicherabfragebefehle (von Aaron Bertrands Beitrag) wie folgt
Beachten Sie auch, dass der Befehl
funktioniert möglicherweise nicht, es sei denn, Sie haben erweiterte Optionen aktiviert. zB mach das zuerst
quelle
Bitte beachten Sie, dass es ein Microsoft-Verbindungsproblem gibt, da dies ein SSMS-Speicherverlust ist. Sie denken, dass sie es in v16.5 gelöst haben
Klicken Sie hier, um das Problem unter Connect.microsoft.com anzuzeigen
Wenn Sie die neueste Version installieren und das Problem weiterhin besteht, stimmen Sie ab, um sie erneut zu öffnen.
SSMS v16.5 hier
Hier wird ein Verbindungsproblem angezeigt, das auf einen in 16.5 behobenen Speicherverlust hinweist
quelle