Sicheres Verschieben und Erstellen neuer Tempdb-Dateien

21

Zwei Dinge, die ich gerne wissen würde:

  • Wie verschieben Sie Tempdb sicher mit minimalen Ausfallzeiten?
  • Wie viele Tempdb-Dateien benötigen Sie?

Ist es 1 Datei pro Kern? Also Quad-Core = 4 Tempdb-Dateien, die drei neue erstellen?

Stuart Blackler
quelle

Antworten:

22

Um tempdbDateien zu verschieben , müssen Sie einfach Folgendes tun:

alter database tempdb
modify file
(
    name = tempdev,
    filename = 'C:\YourNewTempdbDir\tempdb.mdf'
)
go

alter database tempdb
modify file
(
    name = templog,
    filename = 'C:\YourNewTempdbDir\templog.ldf'
)
go

Wenn Sie eine neue Datei hinzufügen möchten tempdb, müssen Sie nur die folgenden PRIMARYSchritte ausführen (vorausgesetzt, Sie möchten sie der Dateigruppe hinzufügen oder eine eigene erstellen):

alter database tempdb
add file
(
    name = tempdb2,
    filename = 'C:\YourNewTempdbDir\Tempdb2.ndf'
)
go

Damit diese Änderungen wirksam werden, müssen Sie den SQL Server-Dienst neu starten. So so weit wie Minimierung von Ausfallzeiten geht, werden Sie auf die Höhe der Zeit gezwungen es für den Dienst Neustart stattfinden wird . Sie müssen sich nicht um das Verschieben der vorhandenen tempdbDatenbankdateien kümmern , da SQL Server die Dateien immer neu erstellt und die neuen Speicherorte / Dateien beim Starten des Dienstes erstellt werden.

Was die "1-Tempdb-Datendatei pro Kern" betrifft, so ist dies größtenteils ein Mythos. Der richtige Ansatz besteht darin, tempdbDateikonflikte auf den Seiten PFS (Page Free Space), GAM (Global Allocation Map) und SGAM (Shared Global Allocation Map) zu überwachen. Verweisen Sie auf diesen Artikel, um eine Abfrage (alternativer Link) zu erhalten , die die sys.dm_os_waiting_tasksDMV durchsucht , um festzustellen, wie viele tempdbDateikonflikte vorhanden sind. Dann müssen Sie dies tun, anstatt nur tempdbmit der gleichen Anzahl von Dateien zu überschneiden, wie es Kerne gibt. Es ist der ratsamere Ansatz.

Thomas Stringer
quelle
8
  1. Führen Sie Folgendes aus, um Tempdb zu verschieben:

    ALTER DATABASE tempdb 
    MODIFY FILE ( name=tempdev, filename='D:\Newpath\tempdb.mdf') 
    GO
    ALTER DATABASE tempdb 
    MODIFY FILE ( name=templog, filename='D:\Newpath\templog.ldf') 
    GO

    Starten Sie dann Ihren SQL Server-Dienst (MSSQLServer) neu.

  2. Anzahl der Dateien in tempdb - siehe Paul Randalls Artikel: Ein SQL Server-DBA-Mythos pro Tag: (30.12.) Tempdb sollte immer eine Datendatei pro Prozessorkern haben

jl01
quelle
4

Nach dem Rat von Microsoft :

Wenn die Anzahl der logischen Prozessoren kleiner oder gleich 8 ist, verwenden Sie in der Regel die gleiche Anzahl von Datendateien wie die der logischen Prozessoren.

Wenn die Anzahl der logischen Prozessoren größer als 8 ist, verwenden Sie 8 Datendateien. Wenn der Konflikt weiterhin besteht, erhöhen Sie die Anzahl der Datendateien um ein Vielfaches von 4 (bis zur Anzahl der logischen Prozessoren), bis der Konflikt auf ein akzeptables Maß reduziert wird Änderungen an der Arbeitslast / dem Code.

Das Verschieben der TempDB-Dateien erfolgt in zwei Schritten:

  1. Teilen Sie SQL mit, wohin Ihre neuen TempDB-Dateien verschoben werden sollen (dies hat keine Ausfallzeit).
  2. Starten Sie den SQL ServerService neu, damit die Änderung wirksam wird (dies ist die minimale Ausfallzeit, die Sie benötigen).

Um SQL mitzuteilen, wo die neuen TempDB-Dateien erstellt werden sollen, können Sie Folgendes verwenden:

DECLARE @newDriveAndFolder VARCHAR(8000);

SET @newDriveAndFolder = 'Z:\YourTempDBfolder';

SELECT [name] AS [Logical Name]
    ,physical_name AS [Current Location]
    ,state_desc AS [Status]
    ,size / 128 AS [Size(MB)] --Number of 8KB pages / 128 = MB
    ,'ALTER DATABASE tempdb MODIFY FILE (NAME = ' + QUOTENAME(f.[name])
    + CHAR(9) /* Tab */
    + ',FILENAME = ''' + @newDriveAndFolder + CHAR(92) /* Backslash */ + f.[name]
    + CASE WHEN f.[type] = 1 /* Log */ THEN '.ldf' ELSE '.mdf' END  + ''''
    + ');'
    AS [Create new TempDB files]
FROM sys.master_files f
WHERE f.database_id = DB_ID(N'tempdb')
ORDER BY f.[type];

Dadurch werden die T-SQL-Anweisungen generiert, die Sie ausführen müssen, um die Dateien in die drive:\foldergewünschten neuen zu verschieben . (zum Vergrößern auf das Bild klicken)

Bild mit 2 Zeilen mit Details zu TempDB-Dateien und T-SQL-Anweisungen zum Verschieben

Wenn Sie Ihre Moving-Anweisungen ausgeführt haben, können Sie die obige Abfrage erneut ausführen, um zu überprüfen, ob in der Current LocationSpalte jetzt Ihre neue Anweisung angezeigt wird drive:\folder.

Bild mit den neuen Speicherorten der TempDB-Dateien

Starten Sie den SQL Server-Dienst neu, sobald Sie mit Ihren Änderungen zufrieden sind .

Oreo
quelle