2009-08-13 7 views
2

Dies ist wirklich eine Zwei-Prong-Frage.TempDB Log File Growth unter Verwendung globaler Temp-Tabellen

One, ich erlebe ein Phänomen, bei dem SQL Server viele tempDB log Dateibereich verbraucht, wenn eine globale temporäre Tabelle mit, während eine lokale temporäre Tabelle verwendet, wird Datendateibereich verbrauchen?

Ist das normal? Ich kann nirgends im Web finden, wo es bei der Verwendung von globalen temporären Tabellen im Vergleich zu lokalen temporären Tabellen über den Speicherverbrauch von Protokolldateien geht.

Zwei, wenn dies erwartetes Verhalten ist, gibt es eine Möglichkeit, es zu sagen, dies nicht zu tun :). Ich habe viel Speicherplatz (6 GB), aber mein Protokollbereich ist eingeschränkt (750 MB mit begrenztem Wachstum). Wie üblich ist die tempDB mit Simple Recovery eingerichtet, so dass es nie ein Problem war, in den Speicherbereich der Protokolldatei einzutreten. Aber ich habe noch nie globale temporäre Tabellen benutzt, wie ich sie vorher benutzt habe.

Danke !! Joel

Antwort

1

Wenn eine Form der temporären Tabelle erstellt wird (lokal oder global), wird die Tabelle physisch erstellt und in der Tempdb-Datenbank gespeichert. Alle Transaktionsaktivitäten für diese Tabellen werden daher in der Transaktionsprotokolldatei "tempdb" protokolliert.

Es gibt jedoch keine Einstellung pro Aussage, Sie könnten eine physische Tabelle im Gegensatz zu einer temporären Tabelle implementieren, um Ihre Daten in einer Benutzerdatenbank zu speichern und dabei die zugehörige Daten- und Transaktionsprotokolldatei für diese Datenbank zu verwenden.

Wenn Sie wirklich in stecken und mehr über die Tempdb-Datenbank erfahren möchten, werfen Sie einen Blick auf die folgenden Ressourcen.

Everyning you ever wanted to know about the tempdb database

+0

Hallo John, Danke für die schnelle Antwort. Ich denke, was ich sehe, ist völlig anderes Verhalten, wenn eine globale temporäre Tabelle vs. eine lokale temporäre Tabelle verwendet wird. Die lokale temporäre Tabelle scheint die Protokolldatei nicht annähernd so drastisch zu beeinflussen wie die globale temporäre Tabelle. Die Verwendung einer globalen temporären Tabelle führt dazu, dass die Protokolldatei so wächst, als ob die Daten in der Datei gespeichert würden, während die Verwendung einer lokalen temporären Tabelle dazu führt, dass sie mit einer normalen Geschwindigkeit wächst. – JayRu

0

Was ist die Lebensdauer eines dieser globalen temporären Tabellen? Werden sie in angemessener Zeit fallen gelassen? "Reguläre" temporäre Tabellen werden gelöscht, wenn der Benutzer die Verbindung trennt, wenn nicht vorher manuell, und "Globale" (##) temporäre Tabellen werden gelöscht, wenn der Speicher beendet wird, wenn die Erstellungssitzung endet. Ich kann das Protokoll wachsen sehen, wenn die globalen temporären Tabellen für eine lange Zeit dauern, weil die Protokollsätze, die die temporäre Tabellenaktivität steuern, immer noch als aktive Protokollsätze markiert sind und nicht mit der Protokollsicherung (vollständige Wiederherstellung) freigegeben werden. oder Prüfpunkte (einfach)

+0

Sehr interessanter Gedanke und möglicherweise richtig. In meinem Fall sehe ich, dass die Protokolldatei sofort wächst, wenn Zeilen zur globalen temporären Tabelle hinzugefügt werden, so dass ich nicht weiß, ob die Lebensdauer das Problem ist. Vielleicht ist es der Fall, dass die lokale temporäre Tabelle auch das Protokoll in ähnlicher Weise vergrößert, aber Protokollsicherungen können fortfahren und es wird einfach etwas wachsen und dann abschneiden ... Ich muss untersuchen. – JayRu

0

Die Länge der Sitzung hat Auswirkungen wie oben erwähnt.

Auch temporäre Tabellen arbeiten innerhalb von Transaktionen und Tabelle Variable arbeiten außerhalb des Kontextes von Transaktionen. Aus diesem Grund protokolliert das temporäre Protokoll Einträge in der Protokolldatei, die sich auf die Aktualisierungen für die Verwendung der Tabelle beziehen.