如何解决SQLServer占用内存的问题

如何解决SQLServer占用内存的问题,第1张

如何解决SQLServer占用内存的问题,第2张

经常看到有人问,MSSQL占用内存太多,而且还不停增长;或者已经设置了使用内存,但是没用那么多。发生了什么事?

首先,我们来看看MSSQL是如何使用内存的。

开销通常用于数据缓存。如果有足够的内存,它会把所有用过的数据和你认为你会用到的数据都扔进内存。只有在内存不足的情况下,命中率低的数据才会被清除。所以我们看统计io的时候,看到的物理读数都是0。

其次是查询开销。一般来说,hash join会带来比较大的内存开销,merge join和nested loop开销比较小,还有排序、中间表和游标。

因此,用于关联和排序的列通常需要索引。

然后就是执行计划和系统数据的存储,相对来说比较少。

我们先来看看数据缓存对性能的影响。如果系统中没有其他应用程序争用内存,那么数据缓存越多越好。有时候我们甚至会强行把一些数据钉到缓存里。但是如果有其他应用,虽然MSSQL会在需要的时候释放内存,但是也会花时间去切换线程和等待IO,所以性能会降低。所以我们必须设置MSSQL的内存使用量。您可以在SQL Server属性(“内存”选项卡)中找到配置内存使用的位置,也可以使用sp_configure来完成此操作。如果没有其他应用程序,那么就不要限制MSSQL对内存的使用。

然后再看查询开销。显然开销越低越好,因为我们无法从中获益。相反,我们使用的内存越多,查询速度越低。因此,我们一般应该避免使用中间表和游标,并在经常关联和排序的列上建立索引。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 如何解决SQLServer占用内存的问题

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情