tempdb這個系統數據庫大家都很熟悉,很多新手對tempdb都是不去操作,而使用它的默認配置。
這其實並沒有錯,但是在追求性能之上的情況下,可以考慮對tempdb的配置進行修改。
服務器配置:
系統:win2008
數據庫:sqlserver2008 R2
CPU:24核,
內存:224GB,其中168GB給數據庫使用,
硬盤:4塊15000轉機械硬盤組成raid5陣列。
服務器使用情況:
IO平均隊列在5以下,高峰值在50左右,但不會持續2分鍾以上,
CPU平均占用率在15%以下,高峰不超過50%,持續時間不過程30秒,
緩存頁面生存周期按天算。
以下是本人執行的一個腳本,

在這里我們可以清晰的發現,tempdb所占的緩存為33695MB。
實際上,大多數服務器上,tempdb所占的空間不會超過2GB。這是什么問題造成的?
由於沒有保存原有的tempdb的默認配置下,
當時tempdb只有一個主文件,有160GB左右,占用100多GB內存。
不過大家可以看我以前發布的一個帖子,這個帖子是我第一次遇到tempdb異常時,做的處理。
地址是:http://bbs.csdn.net/topics/390808985
后來在黃sir的提醒下,以及我查閱了很多資料,對tempdb進行了處理。
tempdb有6個數據文件,一個日志文件,每個數據文件大小為10GB,日志文件為5GB。
然后tempdb占用的緩存一直保持在20GB左右,最近由於tempdb的文件再次增長,文件大小如下:

於是乎,tempdb在內存中占用的大小就增加了10GB。
網上大多數對tempdb的設置都是按CPU核數來設置tempdb的文件個數,
我這里采用的是24核CPU/6個數據文件,按4:1的比例來設計的。
從上面的分析,我得出來的結論是:
1、tempdb單個文件越大,如果內存富余,在內存中占用的緩存就越大(也有可能是不准確的,因為這僅僅是我接觸一個場景)
2、tempdb單個文件越大,如果內存剛好或已經出現瓶頸,那么內存中的交換就越頻繁,這會間接造成IO隊列上升。
這是本人遇到的一個場景,然后根據場景所得出的結論,因為沒有嘗試驗證其它的場景,所以得出的觀念可能很片面,
但我希望能幫助到大家。
如果有別的看法,歡迎大家交流。
