2017-01-03 5 views
0

Die AusgabeWarum wird meine SQL Transaction-Protokolldatei nicht automatisch vergrößert?

Ich habe in einer Tabelle, die eine besonders große Abfrage ausgeführt wird, Erzeugen von Millionen von Datensätzen eingeführt werden. Jedes Mal, wenn ich die Abfrage ausführe, erhalte ich eine Fehlermeldung, dass die Transaktionsprotokolldatei voll ist.

Ich habe es geschafft, eine Testabfrage zu erhalten, die mit einer reduzierten Menge von Ergebnissen und mit SELECT INTO anstelle von INSERT in als vorgefertigte Tabelle ausgeführt wurde. Dieser reduzierte Satz von Ergebnissen erzeugte eine Tabelle mit 20 gb, 838.978.560 Zeilen.

Beim Versuch, in die vorbereitete Tabelle einfügen, habe ich es auch mit und ohne einen Cluster-Index versucht. Beide sind gescheitert.

Servereinstellungen

Der Server SQL Server 2005 (Full nicht Express) ausgeführt wird. Die verwendete dbase wird für die Wiederherstellung auf SIMPLE gesetzt, und auf dem Laufwerk, auf dem sich die Datei befindet, ist Speicherplatz (ca. 100 GB) verfügbar.

Die Einstellung der Transaktionsprotokolldatei gilt für Dateiwachstum von 250 MB und maximal 2.097.152 MB.

Die Protokolldatei scheint wie erwartet zu wachsen, bis sie 4729 MB erreicht.

Als das Problem zum ersten Mal auftrat, wuchs die Datei auf einen niedrigeren Wert, aber ich habe die Größe anderer Protokolldateien auf demselben Server verringert. Dadurch scheint diese Transaktionsprotokolldatei um den gleichen Betrag wie die Reduzierung weiter zu wachsen die anderen Dateien.

Ich habe jetzt keine Ideen mehr, wie man das löst. Wenn jemand einen Vorschlag oder Einblick in was zu tun hat, wäre es sehr geschätzt.

+1

überprüfen Sie https://technet.microsoft.com/en-us/library/dd425070(v=sql.100).aspx. Es gibt Dinge, die Sie tun können, um SQL Server zu Masseneinfügung zu zwingen, die die Anzahl der T-Protokolleinträge verringern sollte. – Jeremy

Antwort

0

Zuerst möchten Sie, wenn möglich, das automatische Wachstum vermeiden. Auto-Wachstumsereignisse sind riesige Leistung Killer. Wenn Sie 100 GB zur Verfügung haben, ändern Sie die Größe der Protokolldatei auf etwa 20 GB (nur vorübergehend während der Fehlerbehebung). Meine Richtlinie war immer die Verwendung von 90% des Speicherplatzes, der einer bestimmten MDF/NDF/LDF-Datei zugewiesen wurde. Es gibt keinen Grund, es nicht zu tun.

Wenn Sie SIMPLE Recovery verwenden SQL Server soll die Aufgabe der Rückgabe von ungenutztem Speicherplatz verwalten, aber manchmal SQL Server macht keine gute Arbeit. Bevor Sie Ihre Abfrage ausführen, überprüfen Sie, ob frei ist. Sie können dies tun, indem Sie:

  1. mit der rechten Maustaste auf den DB> gehen Sie zu Aufgaben> Shrink> Dateien.
  2. Änderung der Typ auf „Anmelden“

enter image description here

Dies wird Ihnen helfen zu verstehen, wie viel ungenutzten Raum Sie haben. Sie können "Seiten reorganisieren, bevor ungenutzter Speicherplatz freigeben> Datei verkleinern" auf 0 setzen. Sie können auch nicht genutzten Speicherplatz mit CHECKPOINT freigeben. Dies kann als erster Schritt vor der Ausführung der Abfrage enthalten sein.

+0

Danke für den Rat. Ich habe bereits versucht, die Protokolldatei auf 0 zu verkleinern, ohne Glück.Ich habe CHECKPOINT (zweimal in Folge) ausgeführt, was ich sah, sollte es zurücksetzen, auch ohne Glück. Das Problem besteht hauptsächlich darin, dass das Protokoll aus irgendeinem Grund nicht weiter als 4 - 5 GB zu wachsen scheint. Ich denke, dass, obwohl ich rund 100 GB frei zeige, es in irgendeiner Weise verwendet wird, damit das Protokoll es aufnehmen kann. – MKC

+0

Haben Sie versucht, mehrere LDF-Dateien zu erstellen? –

+0

Nein, ich habe gelesen, dass es keinen Vorteil gäbe, wenn sie auf der gleichen Fahrt wären, was in meinem Fall der Fall wäre. Ich kann es trotzdem versuchen. Danke für den Vorschlag. – MKC

Verwandte Themen