Memindahkan dan membuat file tempdb baru dengan aman

21

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?

Stuart Blackler
sumber

Jawaban:

22

Untuk memindahkan tempdbfile, 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 PRIMARYfilegroup, 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 tempdbfile 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 tempdbpertengkaran 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_tasksDMV untuk melihat berapa banyak tempdbpertengkaran file yang ada. Maka Anda harus keluar dari ini, bukan hanya menyelimuti tempdbdengan jumlah file yang sama karena ada inti. Itu pendekatan yang lebih disarankan.

Thomas Stringer
sumber
4

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:

  1. Beri tahu SQL ke mana Anda ingin file TempDB baru Anda pergi (ini tidak memiliki downtime)
  2. Restart yang SQL Serverlayanan 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:\folderAnda inginkan. (klik gambar untuk memperbesar)

Gambar menampilkan 2 baris dengan detail pada file TempDB dan pernyataan T-SQL untuk memindahkannya

Ketika Anda telah menjalankan pernyataan bergerak Anda, Anda dapat menjalankan kueri di atas lagi, untuk memeriksa bahwa Current Locationkolom sekarang menunjukkan yang baru drive:\folder.

Gambar menampilkan lokasi baru file TempDB

Setelah Anda puas dengan perubahan Anda, restart layanan SQL Server .

Oreo
sumber