Site icon Mr. 沙先生

MSSQL tempdb 概念及壓縮減肥

此篇是有關於 SQL 中 tempDB 的概念及壓縮方式

 

tempdb 概念

其實就和系統中的 temp 一樣是一個暫時存在的空間,通常用來存放用來運算的資料或暫時存在的資料。

由於類似緩存的空間在預設裝起來的時候並沒有特別限制 tempdb 的大小,在長期使用後通常 tempdb 都會非常肥大。

 

MSDN 看到如果要最佳化 tempdb 則可以讓每個資料庫擁有自己的 tempdb,並且依照每個資料庫的運算屬性去調配大小。

 

 

 

tempdb 壓縮實作

因為今天在處理一台 Server 因為空間非常的不足,導致常常要檢查磁碟空間不要爆滿,但因為這台 Server 因系統上線進行轉換大量的資料,所以也抓不準其他人在使用中會產生什麼資料讓磁碟空間爆滿,最後採用定期檢查的方式解決這個過渡時期。

 

轉換的資料大多是 SQL ,所以在 Log 的成長必須要有所限制。在今天則發現 tempdb 非常的肥大,所以特別紀錄此篇壓縮實例

 

一般壓縮

在一般的狀況中可以使用 SSMS 工具的壓縮功能釋放 tempdb

tempdb 右鍵→「工作」→「壓縮」→「資料庫」

 

並勾選【釋放未使用空間之前重新組織檔案。】進行釋放。一般可以釋放出好幾G的空間。

 

 

進階壓縮

使用 SSMS 的壓縮功能是最安全的,但相對的壓縮的量並沒有那麼有效果,在使用此方式時建議將AP的服務停止,使其不要再對資料庫有 connection。

因為此種方式將會強制釋放占用的記憶體,若是在線上中的系統有在進行資料運算,難保會有 connection 被中斷造成問題。

 

-- 避免還有資料還在記憶體內,執行 Checkpoint 建立手動檢查點。 
Checkpoint
GO

-- 強制釋放佔用的記憶體
DBCC FREESYSTEMCACHE ('ALL')
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
DBCC FREESESSIONCACHE
GO

-- 執行壓縮指令

DBCC SHRINKDATABASE(N'tempdb')

 

 

此時應該釋放了大量的空間

 

但要解決還是必須從根本產生 tempdb 的問題來看

 

 

 

 

 

 

參考資料

MSDN 最佳化 tempdb 效能

MSDN tempdb 資料庫

http://www.dotblogs.com.tw/jamesfu/archive/2014/05/20/shrinktempdb.aspx

Exit mobile version