Auf dem Systemdatenträger ist nicht genügend Speicherplatz verfügbar, wenn schwere SQL-Abfragen unter SQL Server 2012 ausgeführt werden

14

Ich bin ziemlich neu in SQL Server 2012, ich wäre dankbar, wenn jemand helfen kann. Ich habe eine Kopie einer riesigen Datenbank in SQL Server 2012 wiederhergestellt und versucht, einige einfache Abfragen auszuführen.

Ich versuche, eine SELECT-Abfrage für eine Datenbanktabelle von 136898115Zeilen auszuführen . Diese SELECTAbfrage enthält nur eine einfache WHEREKlausel. Jedes Mal, wenn ich diese Abfrage ausführe, schlägt dies fehl, weil auf der Systemfestplatte (der Partition, auf der Windows installiert ist - C:\) nicht genügend Speicherplatz vorhanden ist (diese Partition verfügt nur über 6 GB freien Speicherplatz), und ich verstehe nicht, warum. Ich habe mein tempdb so definiert, dass es sich auf einem anderen Laufwerk befindet, das mehr als 14 Terabyte freien Speicherplatz hat. Natürlich befindet sich meine Datenbank auch auf einem anderen Laufwerk.

Wodurch geht meiner Systempartition der Speicherplatz aus? Ist es die Auslagerungsdatei?

Royv
quelle
2
Ich bin nicht mehr genügend Speicherplatz auf dem System im laufenden SSMS, aber es ist die gleiche Maschine. Ich benutze SSMS auf dem eigentlichen SQL Server.
Royv
2
Im Allgemeinen wird empfohlen, keine anderen Anwendungen auf einer SQL Server- Windows-Box ( nicht SSMS) auszuführen oder sicherzustellen, dass die maximale Speichereinstellung niedrig genug ist, um genügend freien Arbeitsspeicher zuzulassen. Siehe meine Antwort hier: dba.stackexchange.com/a/19776/2718
Jon Seigel

Antworten:

12

SSMS-Abfrageergebnisse werden standardmäßig auf Laufwerk C: zwischengespeichert. Gehen Sie zu Tool \ Options. Siehe Anhang. Ändern Sie dies auf ein anderes Volume mit mehr Speicherplatz und Sie sollten in Ordnung sein.

Bildbeschreibung hier eingeben

Eric Higgins
quelle
1
Wenn Sie "Ergebnisse in Datei" auswählen, wird das Dialogfeld "Speichern unter" standardmäßig geöffnet. Ich glaube nicht, dass SSMS Ergebnismengen standardmäßig auf der Festplatte speichert, aber ich könnte mich irren.
Jon Seigel
1
Die Ergebnisse, die Sie in Ihrem Abfragefenster erhalten, werden gemäß meinem Beitrag zwischengespeichert. Überprüfen Sie Ihr Laufwerk, führen Sie eine große Abfrage in SSMS aus und wiederholen Sie die Überprüfung. Sie werden einen Speicherverlust auf Ihrem Laufwerk C: sehen, wenn Sie nichts anderes angegeben haben.
Eric Higgins
1
das ist richtig. Es hat nichts mit meiner Auslagerungsdatei zu tun. Ich habe meine Auslagerungsdatei auf ein anderes Laufwerk verschoben, und mein Laufwerk C: hat immer noch nicht genügend Speicherplatz.
Royv
11

Okay, ich habe es herausgefunden: Eric und ich hatten beide recht!

  • Der Pfad im Dialogfeld ist wie gesagt nur ein Standardpfad zum Speichern der Abfrageergebnisse.
  • Abfrageergebnisse werden auf der Festplatte zwischengespeichert (ich habe mich geirrt), jedoch im lokalen temporären Profilordner ( C:\Users\<UserName>\AppData\Local\Tempin meinem Fall hier). Ich habe nachgesehen, und es scheint keinen offensichtlichen Weg zu geben, um dieses Caching auszuschalten.

Die Imbissbuden sind also:

  • Vermeiden Sie es, SSMS direkt auf der SQL-Box auszuführen
  • SELECT *Verwenden Sie keine große Tabelle in SSMS, es sei denn, die Ergebnismenge passt in den Profilordner
  • Stellen Sie sicher, dass die SQL Server-Einstellung für den maximalen Arbeitsspeicher korrekt konfiguriert ist (möglicherweise hat sie zu diesem Problem im Hinblick auf das Wachstum der Auslagerungsdatei beigetragen).
Jon Seigel
quelle
7

Ich habe gerade das gleiche Problem gelitten. Nachdem ich die Antworten oben gelesen hatte, fand ich Folgendes.

Werkzeuge | Optionen ist nicht die Antwort. Meins war auf Y: Laufwerk eingestellt, aber ich habe beobachtet, wie meine Abfrage ausgeführt wurde und der Speicherplatz auf dem Laufwerk C: von 2,9 GB auf 5,04 MB gesunken ist (bevor ich die Abfrage beendet habe).

Also dachte ich, es sind wahrscheinlich Caching-Ergebnisse (da sie sehr groß sind und jede Zeile einen großen Teil von XML enthält) im Temp-Verzeichnis, was Jon gesagt hat, aber er war sich nicht sicher, wie Sie das ändern würden.

Was ich getan habe, um zu ändern, wo temporäre Dateien geschrieben werden, war, meine Umgebungsvariablen zu öffnen und die Benutzervariablen TEMP und TMP (die beide auf C: \ Temp gesetzt waren) zu bearbeiten, um in Z: \ Temp zu schreiben.

Ich kann bestätigen, dass nach dieser Änderung die Abfrage eine sehr große Datei in meinem Verzeichnis Z: \ Temp erstellt hat.

Nick Ryan
quelle
Hervorragende Informationen, wenn Sie einen Prozess durchlaufen müssen, um den HD-Speicher Ihres virtuellen Computers zu aktualisieren und über ausreichend Netzwerkspeicher zu verfügen. Ich bin allerdings etwas neugierig, ob Sie bei Netzwerkproblemen, bei denen die Dateiübertragungsraten zu niedrig sind, möglicherweise außerhalb Ihrer C: \ Slow Query-Leistung arbeiten.
GibralterTop
Das ist 3 Jahre her und ich kann mich nicht genau an die damaligen Umstände erinnern. Ich habe jetzt einen Laptop mit einer pathetischen Menge an RAM und Rechenleistung, was eine andere Geschichte ist. Ich bin mir ziemlich sicher, dass das Z: -Laufwerk nur ein weiteres "lokales" Laufwerk auf meiner VM war. Ich bin mir nicht sicher, warum sie es nicht als D: oder E: bezeichnet haben, aber dieser Teil lag außerhalb meiner Kontrolle. Für mich gab es also kein wirkliches Netzwerkproblem.
Nick Ryan