Dua hal yang ingin saya ketahui:
- bagaimana Anda memindahkan tempdb dengan aman dengan downtime minimal?
- berapa banyak file tempdb yang Anda butuhkan?
Apakah 1 file per inti? Jadi quad-core = 4 file tempdb, membuat tiga yang baru?
sumber
Dua hal yang ingin saya ketahui:
Apakah 1 file per inti? Jadi quad-core = 4 file tempdb, membuat tiga yang baru?
Untuk memindahkan tempdb
file, Anda hanya perlu melakukan hal berikut:
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
Jika Anda ingin menambahkan file baru tempdb
, Anda hanya perlu melakukan hal berikut (asalkan Anda ingin menambahkannya ke PRIMARY
filegroup, atau buat sendiri):
alter database tempdb
add file
(
name = tempdb2,
filename = 'C:\YourNewTempdbDir\Tempdb2.ndf'
)
go
Agar perubahan ini berlaku, Anda harus memulai kembali layanan SQL Server. Jadi sejauh meminimalkan downtime, Anda dibatasi dengan jumlah waktu yang diperlukan untuk memulai ulang layanan . Anda tidak perlu khawatir tentang memindahkan tempdb
file database yang sudah ada sebelumnya , karena SQL Server selalu menciptakan kembali file dan lokasi / file baru akan dibuat pada saat startup layanan.
Adapun "1 file data tempdb per inti", itu sebagian besar mitos. Pendekatan yang benar adalah dengan memantau tempdb
pertengkaran file untuk halaman Ruang Kosong (PFS), Peta Alokasi Global (GAM), dan halaman Peta Alokasi Global Bersama (SGAM). Silakan referensi artikel ini untuk mendapatkan kueri (tautan alternatif) yang melihat melalui sys.dm_os_waiting_tasks
DMV untuk melihat berapa banyak tempdb
pertengkaran file yang ada. Maka Anda harus keluar dari ini, bukan hanya menyelimuti tempdb
dengan jumlah file yang sama karena ada inti. Itu pendekatan yang lebih disarankan.
Untuk memindahkan tempdb, jalankan:
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
Kemudian restart SQL Server Service (MSSQLServer) Anda.
Jumlah file dalam tempdb - lihat artikel Paul Randall: Mitos SQL Server DBA sehari: (12/30) tempdb harus selalu memiliki satu file data per inti prosesor
Dari saran Microsoft :
Sebagai aturan umum, jika jumlah prosesor logis kurang dari atau sama dengan 8, gunakan jumlah file data yang sama dengan prosesor logis.
Jika jumlah prosesor logis lebih besar dari 8, gunakan 8 file data dan kemudian jika pertentangan berlanjut, tambah jumlah file data dengan kelipatan 4 (hingga jumlah prosesor logis) hingga pertikaian dikurangi ke tingkat yang dapat diterima atau buat perubahan pada beban kerja / kode.
Memindahkan file TempDB adalah proses 2 langkah:
SQL Server
layanan untuk perubahan tersebut berlaku (ini adalah downtime minimum Anda perlu)Untuk memberi tahu SQL tempat membuat file TempDB baru, Anda dapat menggunakan:
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];
Ini akan menghasilkan pernyataan T-SQL yang perlu Anda jalankan untuk memindahkan file ke yang drive:\folder
Anda inginkan. (klik gambar untuk memperbesar)
Ketika Anda telah menjalankan pernyataan bergerak Anda, Anda dapat menjalankan kueri di atas lagi, untuk memeriksa bahwa Current Location
kolom sekarang menunjukkan yang baru drive:\folder
.
Setelah Anda puas dengan perubahan Anda, restart layanan SQL Server .