iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 27
1
自我挑戰組

IT人員面面觀系列 第 27

[Day27]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的習慣是很重要的!


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

尚未有邦友留言

立即登入留言