it-swarm.com.de

Warum würde das Verkleinern des TEMPDB-Protokolls zu Langsamkeit führen?

Ich habe kürzlich versehentlich das Tempdb-Protokoll auf fast 0 verkleinert, nachdem ich benachrichtigt wurde, dass das Protokolllaufwerk voll ist. Mir wird gesagt, dass es zu Langsamkeit führen wird. Kann jemand bitte erklären, warum es zu Langsamkeit führt?

11
user193020

Ich würde die Person, die Ihnen das gesagt hat, bitten, zumindest zu hören, warum sie glaubt, dass dies die Leistung beeinträchtigen wird.

Ein Grund dafür ist, dass Ihr TLOG nicht bei 0 bleibt. Da Sie es so klein geschrumpft haben, haben Sie vermutlich das automatische Wachstum eingestellt. Abhängig davon, wie Sie es konfiguriert haben, wird es jedes Mal um einen festgelegten Betrag oder jedes Mal um einen Prozentsatz seiner Größe vergrößert. Daher muss SQL Server jedes Mal, wenn Ihr Transaktionsprotokoll wachsen muss, Arbeiten ausführen, die Sie hinsichtlich der Leistung feststellen können.

Ein Hauptgrund ist im ersten Link unten aufgeführt:

Wenn der automatische Wachstumsmechanismus des Transaktionsprotokolls aktiviert wird, muss SQL Server immer den neuen Block, der am Ende der Datei hinzugefügt wird, auf Null initialisieren . Es spielt keine Rolle, ob Ihre SQL Server-Instanz mit der Berechtigung Instant File Initialization ausgeführt wird oder nicht - das Transaktionsprotokoll ist immer null initialisiert.

Sinnvoller ist es, ein dediziertes Laufwerk für diese Datei festzulegen und die LOG-Datei auf die Größe des Laufwerks einzustellen. Warum auf 0 schrumpfen, wenn Sie wissen, dass es nur wieder wachsen wird und Sie mit der Größe an derselben Stelle bleiben, Fragmentierung verursachen usw.?

tempdb verwendet das einfache Wiederherstellungsmodell und löscht das Protokoll, wenn ein Prüfpunkt ausgegeben wird. Dies geschieht automatisch, wenn die Protokollnutzung 70% erreicht und im Fall von tempdb keine schmutzigen tempdb Seiten auf die Festplatte gezwungen werden. Siehe Paul Randalls Beitrag dazu. VLFs werden nach Möglichkeit auch während des Checkpoints inaktiviert. Wenn Sie das Protokoll verkleinern, werden die VLFs entfernt.

13
scsimon

Ein weiterer Punkt, um die beiden gut vorhandenen Antworten zu ergänzen.

Sobald Sie die beste Größe für Tempdb festgelegt haben, sollten Sie sie manuell auf diese Größe einstellen. Wenn dies nicht erfolgt, wenn SQL monatlich neu gestartet wird, während das System gepatcht wird (vorausgesetzt, Sie führen monatliche Patches durch), wird es auf die kleinere Größe zurückgesetzt und muss vergrößert werden, wodurch die in den anderen Antworten genannten Leistungsprobleme auftreten.

USE [master]
GO
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'temp2', SIZE = 2560000KB )
GO
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'tempdev', SIZE = 2560000KB )
GO

Außerdem ist eine vernünftige Einstellung für das automatische Wachstum vorgesehen. Es sollte ein Wert in MB sein, niemals einen Prozentsatz verwenden.

6
James Jenkins

Wenn eine Datei als Ergebnis einer Transaktion wächst, wird diese Transaktion angehalten, während die Datei wächst. Alle anderen Transaktionen, die die Datei verwenden, können ebenfalls betroffen sein. Dies ist zusätzlich zu der Belastung, die das Wachstum der Datei auf den Dateisystemen verursacht, obwohl das Trennen Ihrer Dateien dabei helfen kann.

Insbesondere Protokolldateien müssen vergrößert und auf Null gesetzt werden, bevor sie verwendet werden können. Sie können jedoch die sofortige Dateiinitialisierung für Datendateien aktivieren.

Im Idealfall sollten Sie tempdb auf die benötigte Größe wachsen lassen und dort belassen. Wenn jedoch eine fehlerhafte Transaktion das Wachstum verursacht hat, ist es akzeptabel, es auf eine normale Größe zu verkleinern. Aber es auf 0 zu verkleinern war nicht die beste Maßnahme.

5
Jonathan Fite