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?
Dwie rzeczy, które chciałbym wiedzieć:
Czy jest to 1 plik na rdzeń? Więc quad-core = 4 pliki tempdb, tworząc trzy nowe?
Odpowiedzi:
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.
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).
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
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:
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ć)
Po uruchomieniu instrukcji ruchomych możesz ponownie uruchomić powyższe zapytanie, aby sprawdzić, czy Current Locationkolumna pokazuje teraz nowe drive:\folder.
Po wprowadzeniu zmian uruchom ponownie usługę SQL Server .