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?
źródło
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?
Aby przenieść tempdb
pliki, 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 tempdb
plikó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 tempdb
rywalizacji 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_tasks
DMV i zobaczy, ile tempdb
istnieje rywalizacja o plik. Następnie musisz wyjść z tego, zamiast po prostu spakować tempdb
taką 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 Server
usł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 Location
kolumna pokazuje teraz nowe drive:\folder
.
Po wprowadzeniu zmian uruchom ponownie usługę SQL Server .