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队列上升。
这是本人遇到的一个场景,然后根据场景所得出的结论,因为没有尝试验证其它的场景,所以得出的观念可能很片面,
但我希望能帮助到大家。
如果有别的看法,欢迎大家交流。