iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 27
1
自我挑戰組

IT人員面面觀系列 第 25

log檔和tempdb檔案大小一直增加時,該如何縮小?

在管理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的習慣是很重要的!


上一篇
建立測試用空的資料庫
下一篇
檢查資料庫中每張資料表的使用狀況
系列文
IT人員面面觀28

尚未有邦友留言

立即登入留言