Sqlserver内存管理:限制最大占用内存_donghustone的专栏-CSDN博客_sqlserver内存限制

来源: Sqlserver内存管理:限制最大占用内存_donghustone的专栏-CSDN博客_sqlserver内存限制

一、SQLServer对系统内存的管理原则是:按需分配,且贪婪(用完不还)。它不会自动释放内存,因此执行结果集大的SQL语句时,数据取出后,会一直占用内存,直到占满机器内存(并不会撑满,还是有个最大限制,比机器内存稍小),在重启服务前,SQLServer不会释放该内存,也没有任何办法可人为释放。以下命令虽然可释放缓存,但SQLServer并不会因此释放已占用的内存。

DBCC FREEPROCCACHE #清除存储过程相关的缓存
DBCC FREESESSIONCACHE #清除会话缓存
DBCC FREESYSTEMCACHE(‘All’) #清除系统缓存
DBCC DROPCLEANBUFFERS #清除所有缓存
二、唯一的办法是:人为修改最大可占用物理内存进行限制。

三、修改办法如下:

管理员用户登录数据库客户端(Microsoft SQL Server Management Studio),在实例名(树形菜单根节点,显示登录名那栏)上右键,选择属性–>内存,设置“最大服务器内存”,单位为MB,可根据实际内存调整。

四、如此调整后,机器内存便不会被sqlserver耗尽了。

 

扩展:(转自网络)

由于Sql Server对于系统内存的管理策略是有多少占多少,除非系统内存不够用了(大约到剩余内存为4M左右),Sql Server才会释放一点点内存。所以很多时候,我们会发现运行Sql Server的系统内存往往居高不下。这些内存一般都是Sql Server运行时候用作缓存的,例如你运行一个select语句,那么Sql Server会将相关的数据页(Sql Server操作的数据都是以页为单位的)加载到内存中来,下一次如果再次请求此页的数据的时候,就无需读取磁盘了,大大提高了速度。这类的缓存叫做数据缓存。还有一些其他类型的缓存,如执行存储过程时,Sql Server需要先编译再运行,编译后的结果也会缓存起来,下一次就无需再次编译了。
————————————————
版权声明:本文为CSDN博主「东东不邪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/donghustone/article/details/83338185

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏