我刚刚在远程主机上将一个小型Web应用程序投入生产。在它运行一段时间后,我注意到MS SQL Server开始消耗服务器上的大部分RAM,使IIS和我的应用程序匮乏。
我尝试更改“服务器最大内存”设置,但最终内存使用率开始超过此设置。使用活动监视器我已经确定我没有留下开放的连接或明显的东西,所以我猜它在缓存,物化视图等。
我开始相信这种设置并不意味着我认为这意味着什么。我注意到,如果我只是重新启动服务器,内存消耗的过程重新开始,而不会对应用程序产生任何负面影响 - 页面加载没有意外,所有检索工作。
必须有一种更好的方法来控制sql或强制它将一些内存释放回系统????
答案 0 :(得分:2)
来自MS知识库:
请注意最大服务器内存选项 仅限制SQL Server的大小 缓冲池。最大服务器内存 选项不限制剩余 SQL Server无保留的内存区域 留下其他的分配 扩展存储等组件 过程,COM对象,非共享 DLL,EXE和MAPI组件。 由于前面的分配, 这对SQL Server来说是正常的 私有字节超过最大服务器 内存配置。
您是否正在使用任何可能在SQL Server控件之外泄漏内存的扩展存储过程,.NET代码等?
关于内存/地址空间使用的更多讨论here
答案 1 :(得分:1)
通常我建议将最大服务器内存设置为安装的物理内存以下的几个Gigs。
如果您需要在服务器上安装IIS和应用程序服务器,那么您将希望为SQL Server提供更少的内存。