tempdb的數據文件越大,在內存中所占緩存就越多


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隊列上升。

這是本人遇到的一個場景,然后根據場景所得出的結論,因為沒有嘗試驗證其它的場景,所以得出的觀念可能很片面,

但我希望能幫助到大家。

如果有別的看法,歡迎大家交流。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM