Bewährte Methode zum Verkleinern von Tempdb in einer Produktionsumgebung


24

Was ist die beste Vorgehensweise beim Verkleinern der temporären Datenbank in SQL Server 2008?

Ist es riskant, Folgendes zu verwenden?

use tempdb
GO

DBCC FREEPROCCACHE -- clean cache
DBCC DROPCLEANBUFFERS -- clean buffers
DBCC FREESYSTEMCACHE ('ALL') -- clean system cache
DBCC FREESESSIONCACHE -- clean session cache
DBCC SHRINKDATABASE(tempdb, 10); -- shrink tempdb
dbcc shrinkfile ('tempdev') -- shrink db file
dbcc shrinkfile ('templog') -- shrink log file
GO

-- report the new file sizes
SELECT name, size
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');
GO

Die beste Vorgehensweise besteht darin, herauszufinden, was das Wachstum fördert, und dies zu beheben. Wenn Sie es schrumpfen, muss es einfach wieder wachsen und das braucht Zeit und IO
Nick.McDermaid

Ja, ich weiß. Aber wenn ich muss, weil es zu spät ist, um aktiv zu sein :) Ist das die beste Lösung?

Entschuldigung, ich kann dir da nicht helfen.
Nick.McDermaid

Antworten:


11

Es wird empfohlen, die normale Verwendung von Tempdb proaktiv zu überwachen und die Größe entsprechend festzulegen. Wenn dies ein Einzelfall ist, in dem die Tempdb auf eine solche Größe und eine PROD-Umgebung angewachsen ist, würde ich SQL Server Services während der wöchentlichen Wartung neu starten. Danach würde Tempdb auf seine konfigurierte Größe zurückkehren.

Das Verkleinern der Datei ist in Ordnung, solange Tempdb nicht verwendet wird. Andernfalls können bestehende Transaktionen unter Performance-Gesichtspunkten aufgrund von Blockierungen und Deadlocks beeinträchtigt werden.

Bereinigungsprozedur-Cache, Puffer-Cache usw. wirken sich negativ auf die Datenbankleistung selbst aus, bis diese nicht neu erstellt werden. Ich würde das bei PROD nicht machen.

Hoffentlich hilft das!


Vielen Dank für Ihre Hilfe. Reicht es aus, mit sp_who nach Prozessen in tempdb zu suchen?

1
Ich glaube nicht, dass dies ein zuverlässiger Weg ist, um herauszufinden, ob eine temporäre Datenbank verwendet wird. Ich denke, das würde nur dann auftauchen, wenn jemand eine temporäre Tabelle direkt in SSMS erstellt. Wenn dasselbe jedoch als Ergebnis einer Abfrageoperation aufgrund von Speicherüberlauf usw. durchgeführt wird, wird es in sp_who2 nicht angezeigt. Diese Frage wäre ein separater Thread. Bitte erstellen Sie dies, da es sich um eine separate Diskussion handelt. Wenn die vorherige Antwort Ihnen geholfen hat, markieren Sie sie bitte als Antwort. Das wird anderen in einer ähnlichen Situation helfen.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.