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?
Zwei Dinge, die ich gerne wissen würde:
Ist es 1 Datei pro Kern? Also Quad-Core = 4 Tempdb-Dateien, die drei neue erstellen?
Antworten:
Um tempdb
Dateien 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 PRIMARY
Schritte 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 tempdb
Datenbankdateien 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, tempdb
Dateikonflikte 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_tasks
DMV durchsucht , um festzustellen, wie viele tempdb
Dateikonflikte vorhanden sind. Dann müssen Sie dies tun, anstatt nur tempdb
mit der gleichen Anzahl von Dateien zu überschneiden, wie es Kerne gibt. Es ist der ratsamere Ansatz.
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.
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
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:
SQL Server
Service 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:\folder
gewünschten neuen zu verschieben . (zum Vergrößern auf das Bild klicken)
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 Location
Spalte jetzt Ihre neue Anweisung angezeigt wird drive:\folder
.
Starten Sie den SQL Server-Dienst neu, sobald Sie mit Ihren Änderungen zufrieden sind .