这是SQL Server 缓冲池的预期行为。
默认情况下,在启动 SQL Server之后,SQL Server会根据操作系统报告的物理内存数来动态增大或缩小高速缓冲存储器的容量。只要可用物理内存大小保持在4MB到10MB之间,SQL Server 缓冲池就会继续增大(保留可用物理内存在4MB到10MB之间是为了避免操作系统因为缺少内存而频繁地换页)。如果物理可用内存变得较少的时候,则SQL Server会将一些内存释放给操作系统。

解决方案 »

  1.   

    通过设置SQL Server 数据库引擎使用的内存的上下限来限制SQL Server 的内存使用量。
    其具体步骤是:
      1.打开企业管理器,展开服务器组。
      2.单击该服务器,点击鼠标右键,单击属性菜单。
      3.在弹出的对话框中单击内存选项卡。  内存设置方法有两种:
      1.设置min server memory和max server memory 在一个范围段内。
      比如,我们将它设置成最小0MB,最大255MB。这种方法在为一台服务器中运行多个应用程序分配内存时非常有用。
      2.设置 min server memory 和 max server memory 为同一数值。
      比如,可以将它最大和最小值都设置成255MB。这样的设置方法与窗口中的另一个选项“使用固定的内存大小" 相一致。
      虽然内存最小值和最大值设置是高级选项,但在设置完毕之后,最好还是先将SQL Server服务停止后再重新运行,以便SQL Server能更好地对内存进行合理安排。 
      

  2.   

    这样做会不会有什么副作用?
    比如导致数据库在繁忙的时候无法获取足够的系统资源而停止服务?经常我们的系统都是在SQLServer内存占有量达到了60%多的时候,整个系统的内存占有量达到70%多的时候,应用程序就停止响应了,这个应用程序是用以操作数据库的。帮忙解释一下。谢谢!
      

  3.   

    我们单位的局域网服务器也有过这种现象,sql server的内存使用量最多时达到将近800M,不过好在我们的网每天晚上没人用,所以就装了一个自动关机的小软件,设置服务器在每天晚上12:30重新启动。后来偶然一次在服务器上运行了一下ansys软件来计算一个很大的数据模型,第二天早晨发现sql server占用的内存自己变小了,只剩下200M左右。于是删除自动关机的软件,让服务器在7×24模式下运行,两天后,sql server内存使用量再次达到了将近800M,不理它,继续,第三天,还是那样,然后继续,继续再继续,现在已连续运行了近半年,还是那个样子,所以我认为不必要去管它,它自己会管理内存的。注,计算机本身的设备一定要让windows自己管理内存。
      

  4.   

    我们的可能与你的系统有所不同,我们的是生产系统,7*24,每年的故障时间要求不超过XX分钟的。所以,是不能像你所说的那样每天重启以解决问题的,当然Windows平台的东西很多都是可以通过Reboot来搞定的。起初,我们也是没有去理会这个增长,它自己的问题应该自己会有一个不错的解决。但是,我们的应用程序是实时读写数据库的,这个绝对就是7*24的了,内存基本上没有被释放的时刻。所以,我很苦恼哇~~~
      

  5.   

    经常我们的系统都是在SQLServer内存占有量达到了60%多的时候,整个系统的内存占有量达到70%多的时候,应用程序就停止响应了,这个应用程序是用以操作数据库的。
    -----------------------此时,你服务器的CPU使用情况是什么?磁盘系统很忙吗?可用内存是多少?
    出现‘应用程序就停止响应了’后,你是重起服务器,还是应用程序?
      

  6.   

    答复qw12cn,出现故障的时候,系统的CPU正常,内存占有量通常高于70%以上。
    没有太注意过故障点的情况,所以不好说。只能知道内存的情况是在70%以上。所谓的停止响应是指在任务管理器中,“应用程序”页也就是第一页状态栏中的状态信息。处理办法是做群集切换,我们做了群集。
      

  7.   

    回答qw12cn的问题,故障出现的时候,可以选择重启应用程序。但事实上SQL的内存占有量并不会降低太多,这样很可能过不了多久故障就会再次出现,这对于7*24的系统来说无疑不是好事情。会遭到投诉。回答iamitd的问题,加内存不能说不是好办法,但是事实上不过是避开了问题,并且不能解决问题,而只是延迟了问题的出现时间。之前10天,现在20天。可以这么做,但是还是觉得不好。我们现在的考虑里面就有定期对服务器进行重启操作,但是毕竟不能治本。
      

  8.   

    如果你的总内存使用只是在80%之内,扩内存应该没有太多作用。‘之后保留在70%~75%左右,用不了几天,频繁读写数据库的一个应用就“无响应”了’
    你的应用程序是7*24,所以有可能是程序容错的问题,或是BUG。
    我觉得和内存没有太大关系。
      

  9.   

    你说的没错,应用程序肯定对内存等资源的使用上存在缺陷。
    但是基本上得到的现象可以从SQL内存的占有量上得到。所以,我想先从SQL入手,毕竟可以通过SQL的调优尽可能的改善一下现状。而修改程序代码毕竟不那么容易,并且我们这儿的应用能得到的支持不多了。比较难。大家继续,我谢谢各位了。
      

  10.   

    gc_ding(E.T)讲的解决方法很好,
    SQL-Server不断吃内存,是把以前查询的数据存在在内存中,为下次查询提高查询效率作准备,所以会不断吃内存,当达到最大值时会自动释放一部分内存,如果用户没设置,就是当前计算机的物理内存为最大值了
      

  11.   

    是不是需要在前台程序中设置数据集为nothing就可以释放内存了?(VB和PowerBuilder)
      

  12.   

    SQL Server在一直开机的情况下,就是不断的吃内存,只要保证物流内存在32兆左右,其他的就拼命的占用!