Hinweis: Dieser Beitrag kann auch nützlich sein:
Probleme mit der TempDB-MDF-Datei nehmen ständig zu
Wenn Sie nicht herausfinden können, welcher Prozess diese Arbeitstabelle verwendet (und sie sicher beenden kann), muss ich dem zustimmen, was Ihre Suchanfragen bereits ergeben haben: Schalten Sie den Server aus und Sie sollten in der Lage sein, Tempdb zu verkleinern.
Eine andere Frage hat sich damit befasst, dies für # temp-Tabellen herauszufinden. Ich weiß nicht, ob es für Arbeitstische angepasst werden kann:
Finden Sie heraus, welche Sitzung welche temporäre Tabelle enthält
Ich habe auch darüber gebloggt (wieder für # temp-Tabellen):
http://sqlperformance.com/2014/05/t-sql-queries/dude-who-owns-that-temp-table
Ich bezweifle, dass die Arbeitstabelle mit der Snapshot-Isolation / dem Versionsspeicher zusammenhängt, aber nur für den Fall:
Suchen Sie nach Transaktionen, die den Versionsspeicher füllen
Verlassen Sie sich auch nicht darauf DBCC OPENTRAN;
- ich habe viele Szenarien beobachtet, in denen ich weiß, dass ich eine aktive Transaktion habe, diese aber dort nicht angezeigt wird. Beachten Sie auch, dass der Datenbankkontext wichtig ist. Die Datenbank, in der die Transaktion aktiv ist, ist nicht unbedingt tempdb. Was siehst du hier? Etwas?
SELECT * FROM sys.dm_tran_active_transactions
WHERE name = N'worktable';
Sobald Sie Tempdb geschrumpft haben
Dies ist natürlich keine dauerhafte Lösung. Du wirst Tempdb verkleinern und dann wird es wieder wachsen. Es kann sehr langweilig und langweilig werden, dieses Spiel jedes Mal zu spielen, wenn es passiert. Und wenn es wieder wachsen wird, was machen Sie in der Zwischenzeit mit diesem freien Speicherplatz? Vermieten Sie es und vertreiben Sie dann Leute, wenn tempdb es wieder braucht? Sie müssen entweder:
- Beheben Sie den Prozess, bei dem Tempdb an erster Stelle ungewöhnlich groß wird.
- Weisen Sie genügend Speicherplatz für Tempdb zu, damit es nicht wachsen muss, und hören Sie auf, es zu verkleinern (insbesondere, wenn auch nur vorübergehend; dies ist nur verschwendete Arbeit!).
Ein paar andere Vorschläge:
- Verwenden Sie nicht
SHRINKDATABASE
(was als Auto-Fragment bezeichnet werden sollte) oder die Benutzeroberfläche. Schreiben Sie spezifische, zielgerichtete SHRINKFILE
Befehle, um einzelne Dateien zu beeinflussen.
- Erwägen Sie die Verwendung mehrerer Dateien für Tempdb (die Sie nach Möglichkeit auf einen anderen Speicher verteilen können) und die Ablaufverfolgungsflags 1117 (sofern dieses Verhalten auch Ihre Benutzerdatenbanken nicht beeinträchtigt) und 1118.
- Einige Tipps zur Minimierung der Tempdb-Auslastung hier:
Nein, dies ist eine vorübergehende Lösung. Ich denke, Sie haben dieselbe Frage bereits gestellt. Können Sie bitte angeben, wie groß die Datenbank in Ihrer SQL Server-Instanz insgesamt ist? Die Größe der Tempdb hängt davon ab, wie oft Ihre Abfragen sie verwenden. Es kann nicht von alleine wachsen, wenn Sie es nicht verwenden. Von Aron freigegebene Links würden helfen, aber Sie müssen Abfragen optimieren, wenn sie stark temdbb verwenden oder möglicherweise die Standardanforderung Ihrer Umgebung sind. Ich habe nur wenige env gesehen. Dabei waren 200 G Tempdb akzeptabel, da für Abfragen so viel Tempdb-Speicherplatz erforderlich war.
quelle