Freigeben über


OutOfMemoryException-Fehler beim Ausführen einer Abfrage in SQL Server Management Studio (SSMS)

Dieser Artikel hilft Ihnen, das Problem zu beheben, das auftritt, wenn Sie SQL Server Management Studio (SSMS) zum Ausführen einer SQL-Abfrage verwenden, die eine große Datenmenge zurückgibt.

Ursprüngliche Produktversion: SQL Server
Ursprüngliche KB-Nummer: 2874903

Problembeschreibung

Wenn Sie SSMS verwenden, um eine SQL-Abfrage auszuführen, die eine sehr große Datenmenge zurückgibt, erhalten Sie eine Fehlermeldung, die wie folgt aussieht:

Fehler beim Ausführen des Batches. Fehlermeldung: Ausnahme vom Typ 'System.OutOfMemoryException' wurde ausgelöst.

Ursache

Dieses Problem tritt auf, da SSMS nicht genügend Arbeitsspeicher hat, um große Ergebnisse zuzuordnen. SSMS ist ein 32-Bit-Prozess. Daher ist er auf 2 GB virtueller Arbeitsspeicher im Benutzermodus beschränkt. SSMS legt im Ergebnisfenster eine künstliche Grenze fest, wie viel Text pro Datenbankfeld angezeigt werden kann. Dieser Grenzwert beträgt 64 KB im Rastermodus und 8 KB im Textmodus. Wenn das Resultset zu groß ist, kann der Speicher, der zum Anzeigen der Abfrageergebnisse erforderlich ist, den Grenzwert von 2 GB des SSMS-Prozesses überschreiten. Daher kann ein großer Resultset den Fehler verursachen, der im Abschnitt "Symptome" erwähnt wird.

Problemumgehung

Um dieses Problem zu umgehen, probieren Sie eine der folgenden Methoden aus.

Methode 1: Ausgabe der Ergebnisse als Text

Konfigurieren Sie das Abfragefenster, um die Abfrageergebnisse als Text auszugeben. Eine Textausgabe verwendet weniger Arbeitsspeicher als das Raster, und es kann ausreichen, um die Abfrageergebnisse anzuzeigen. Führen Sie die folgenden Schritte aus, um diese Änderung vorzunehmen:

  1. Klicken Sie mit der rechten Maustaste auf das Abfragefenster.
  2. Wählen Sie "Ergebnisse" aus.
  3. Wählen Sie "Ergebnisse in Text" aus.

Methode 2: Ausgeben der Ergebnisse in eine Datei

Konfigurieren Sie das Abfragefenster, um die Abfrageergebnisse in eine Datei auszugeben. Eine Dateiausgabe verwendet einen minimalen Arbeitsspeicher. Dadurch wird mehr Arbeitsspeicher zum Speichern des Resultsets reserviert. Führen Sie die folgenden Schritte aus, um diese Änderung vorzunehmen:

  1. Klicken Sie mit der rechten Maustaste auf das Abfragefenster.
  2. Wählen Sie "Ergebnisse" aus.
  3. Wählen Sie die Ergebnisse aus, die sie ablegen möchten.
  4. Führen Sie die Abfrage aus, und wählen Sie dann den Speicherort aus, an dem die Ergebnisdatei gespeichert werden soll.

Methode 3: Verwenden von sqlcmd

Verwenden Sie das sqlcmd-Hilfsprogramm anstelle von SSMS, um die SQL-Abfragen auszuführen. Mit dieser Methode können Abfragen ohne die ressourcen ausgeführt werden, die von der SSMS-Benutzeroberfläche benötigt werden. Darüber hinaus können Sie die 64-Bit-Version von Sqlcmd.exe verwenden, um die Speichereinschränkung zu vermeiden, die sich auf den 32-Bit-SSMS-Prozess auswirkt.