Bezpieczne przenoszenie i tworzenie nowych plików tempdb

21

Dwie rzeczy, które chciałbym wiedzieć:

  • jak bezpiecznie przenieść tempdb przy minimalnym przestoju?
  • ile potrzebujesz plików tempdb?

Czy jest to 1 plik na rdzeń? Więc quad-core = 4 pliki tempdb, tworząc trzy nowe?

Stuart Blackler
źródło

Odpowiedzi:

22

Aby przenieść tempdbpliki, wystarczy wykonać następujące czynności:

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

Jeśli chcesz dodać nowy plik tempdb, wystarczy wykonać następujące czynności (pod warunkiem, że chcesz dodać go do plikuPRIMARY plików lub utworzyć własną):

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

Aby te zmiany weszły w życie, musisz ponownie uruchomić usługę SQL Server. Jeśli chodzi o minimalizowanie przestojów, jesteś ograniczony do czasu potrzebnego na ponowne uruchomienie usługi . Nie musisz się martwić przeniesieniem wcześniej istniejących tempdbplików bazy danych, ponieważ SQL Server zawsze odtwarza pliki, a nowe lokalizacje / pliki zostaną utworzone podczas uruchamiania usługi.

Jeśli chodzi o „1 plik danych tempdb na rdzeń”, jest to w dużej mierze mit. Prawidłowe podejście polega na monitorowaniu tempdbrywalizacji o pliki dla stron Wolne miejsce na stronie (PFS), Globalna mapa alokacji (GAM) i Wspólna globalna mapa alokacji (SGAM). Zapoznaj się z tym artykułem, aby uzyskać zapytanie (alternatywny link), które przejrzy sys.dm_os_waiting_tasksDMV i zobaczy, ile tempdbistnieje rywalizacja o plik. Następnie musisz wyjść z tego, zamiast po prostu spakować tempdbtaką samą liczbę plików, jak są rdzenie. Jest to bardziej wskazane podejście.

Thomas Stringer
źródło
8
  1. Aby przenieść tempdb, wykonaj:

    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

    Następnie uruchom ponownie usługę SQL Server (MSSQLServer).

  2. Liczba plików w tempdb - patrz artykuł Paula Randalla: mit SQL Server DBA dziennie: (12/30) tempdb powinien zawsze mieć jeden plik danych na rdzeń procesora

jl01
źródło
4

Z porady Microsoftu :

Zasadniczo, jeśli liczba procesorów logicznych jest mniejsza lub równa 8, należy użyć tej samej liczby plików danych co procesory logiczne.

Jeśli liczba procesorów logicznych jest większa niż 8, użyj 8 plików danych, a następnie, jeśli rywalizacja trwa, zwiększ liczbę plików danych o wielokrotność 4 (do liczby procesorów logicznych), aż rywalizacja zostanie zredukowana do akceptowalnego poziomu lub zmiany obciążenia / kodu.

Przenoszenie plików TempDB jest procesem dwuetapowym:

  1. Powiedz SQL gdzie chcesz, aby nowe pliki tempdb, aby przejść do (nie ma przestojów)
  2. Uruchom ponownie z SQL Serverusługi dla zmiany odniosły skutek (jest to czas przestoju minimum co potrzeba)

Aby powiedzieć SQL, gdzie należy utworzyć nowe pliki TempDB, możesz użyć:

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];

Spowoduje to wygenerowanie instrukcji T-SQL, które należy uruchomić, aby przenieść pliki do nowego drive:\folder. (kliknij obraz, aby powiększyć)

Obraz przedstawiający 2 wiersze ze szczegółami plików TempDB i instrukcji T-SQL, aby je przenieść

Po uruchomieniu instrukcji ruchomych możesz ponownie uruchomić powyższe zapytanie, aby sprawdzić, czy Current Locationkolumna pokazuje teraz nowe drive:\folder.

Obraz przedstawiający nowe lokalizacje plików TempDB

Po wprowadzeniu zmian uruchom ponownie usługę SQL Server .

Oreo
źródło