在管理SQL Server經常會遇到此類的問題,如果這兩類檔案長的太大的話,
也會造成SQL Server緩慢,因此要控管這兩類檔案的大小,
首先來針對log檔的縮小進行說明。
因為資料庫運行時會有大量的新增、刪除、修改等交易,
致log檔必須是記錄這些動作,
在log檔持續長大的情況下,此時要縮小log檔有兩種方式:
1.寫個數小時備份log檔的job排程
2.直接下指令DBCC SHRINKDATABASE
如果這樣子都縮小不下來,那麼就必須查看是否有大量交易正在進行中佔住Log檔案。
接下來是如何縮小tempdb檔案大小,
因為此類檔案是主要供Store Procedure建立的暫存物件(#,##開頭的)所使用的
,因此要先下CHECKPOINT指令將在記憶體的資料回寫到資料檔裡,
接著再下以指令
--釋放佔用的記憶體
DBCC FREESYSTEMCACHE ('ALL')
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
DBCC FREESESSIONCACHE
GO
要特別注意以上這幾行指令只能在系統的離峰時間進行,
因為有許多SQL指令的執行計劃快取都存在記憶體裡,
一旦清空將導致CPU需要重新編譯執行計劃,
有可能造成CPU使用率拉高並持續一段時間,進而使系統緩慢。
以上指令都做好後,接著再DBCC SHRINKDATABASE(N'tempdb')即可。
通常會讓tempdb暴增的原因是在Store Procedure中大量使用暫存表格和物件,
使用後也沒有立刻刪除(drop),
隨著SP執行次數的增加,暫存物件會持續增加,進而使tempdb檔案愈來愈大。
所以養成良好的撰寫Store Procedure的習慣是很重要的!