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

这是本人遇到的一个场景,然后根据场景所得出的结论,因为没有尝试验证其它的场景,所以得出的观念可能很片面,

但我希望能帮助到大家。

如果有别的看法,欢迎大家交流。

 

posted @ 2015-03-26 18:23  菜鸟就是我  阅读(4822)  评论(0编辑  收藏  举报