Praktik terbaik untuk mengecilkan Tempdb di lingkungan produksi

24

Apa praktik terbaik untuk digunakan saat menyusut db sementara di SQL Server 2008?

Apakah berisiko menggunakan yang berikut ini?

use tempdb
GO

DBCC FREEPROCCACHE -- clean cache
DBCC DROPCLEANBUFFERS -- clean buffers
DBCC FREESYSTEMCACHE ('ALL') -- clean system cache
DBCC FREESESSIONCACHE -- clean session cache
DBCC SHRINKDATABASE(tempdb, 10); -- shrink tempdb
dbcc shrinkfile ('tempdev') -- shrink db file
dbcc shrinkfile ('templog') -- shrink log file
GO

-- report the new file sizes
SELECT name, size
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');
GO
Mcol
sumber
Praktik terbaik adalah mencari tahu apa yang membuatnya tumbuh, dan mengatasinya. Jika Anda mengecilkannya, itu hanya harus tumbuh lagi dan itu membutuhkan waktu dan IO
Nick.McDermaid
Ya saya tahu. Tetapi ketika saya harus, karena sudah terlambat untuk menjadi proaktif :) Apakah ini solusi terbaik?
Maaf saya tidak bisa membantu Anda di sana.
Nick.McDermaid

Jawaban:

11

Ini adalah praktik terbaik untuk secara proaktif memantau penggunaan Tempdb yang normal dan mengatur ukurannya. Jika ini adalah salah satu kasus di mana Tempdb telah berkembang ke ukuran seperti itu dan itu adalah PROD env, saya akan me-restart SQL Server Services selama pemeliharaan mingguan. Di sana setelah Tempdb akan kembali ke ukuran yang dikonfigurasi.

Mengecilkan file baik-baik saja selama Tempdb tidak digunakan, kalau tidak transaksi yang ada mungkin terpengaruh dari sudut pandang kinerja karena pemblokiran dan kebuntuan.

Cache prosedur pembersihan, cache buffer, dll. Akan berdampak negatif pada kinerja database itu sendiri hingga tidak dibuat kembali. Saya tidak akan melakukan ini di PROD.

Semoga itu bisa membantu!


sumber
Terima kasih atas masukannya. Apakah cukup dengan memeriksa sp_who untuk proses di tempdb?
1
Saya tidak berpikir itu adalah cara yang dapat diandalkan untuk mengetahui apakah temp db sedang digunakan. Saya pikir itu hanya akan muncul jika seseorang membuat tabel temp langsung di SSMS secara langsung. Tetapi jika hal yang sama dilakukan sebagai hasil dari operasi query karena memory spill dll maka tidak akan muncul di sp_who2. Pertanyaan itu sebenarnya adalah utas terpisah. Harap buat itu karena ini adalah diskusi terpisah. Jika jawaban sebelumnya membantu Anda, tandai sebagai jawaban. Itu akan membantu orang lain dengan situasi yang sama.