最近做了一个网站qq.115sou.com,在服务器中SQL Server占用内存非常高,加内存后,SQL Server又吃掉新加的内存,好像内存永远不够用一样,怎么办?
其实这并不一定是由于SQL Server活动过度造成的,在启动SQL Server后,SQL Server内存使用量会持续稳定上升,即使服务器上活动很少也不会下降,直到物理内存仅剩下4到10M为止,这是SQL Server缓冲池的预期行为,正常现象。
不过这种现象使得服务器应付峰值的能力降低,当突然有较大的活动时,可能使得服务器当机。要限制缓冲池的内存使用量,可以打开“SQL Server属性”->“内存”,在这一页中降低“最大值”,点击“确定”。点击“运行值”,可以发现“最大值”没有变化,说明刚才的设置并没有生效,实际上该设置更改后要重新启动SQL Server才能生效,重新启动SQL Server。
这里的内存,并不是指SQL Server整个占用的内存,而是指SQL Server缓冲池所用的内存,所以SQL Server实际所占内存要大于此值。
SqlServer2005内存分配
默认情况下Sqlserver2005的内存会根据可用资源的情况动态的变化.Min server Memory的默认值为0,Max server memory的默认值为2147483647,可以为Max server memory的值指定为最小内在为16MB. 但是如果把Max server memory的值设置为最小降底Sqlserver2005的性能,甚至无法启动.如果出现无法启动的时候可以使用-f startup选项进行启动,并将Max server memory设置成以前的值.. 当Sqlserver动态使用内存时,他会定期查询系统以确定可用物理内存量,在Server2000中,Sql会根据服务器的活动来增大或收缩缓冲区调整缓存,以使可用物理内存保持在4MB和10Mb之间.保持此可用内存可避免Win server2000分页.如果内存过少则Server2000会释放内存给WinServer2000,如果内存过多Sql2000将分配内存给缓冲池.Sql仅在工作负荷需要时才增加内存给缓冲池.处于休眠状态的服务器不会增加其缓冲池的内存. 手动设置Sql内存的方法: 一:将Min server memory和Man server memory设置成同一值,此值与达到该值后分配给缓冲池的固定内存相对应. 二:将Min server memory和Man server Memory设置成一个范围内,这种方法系统或数据管理员希望配置Sql实例,同时又要考虑同一台机器上运行其它应用程序的内存需求很有用. Min server memory保证了Sqlserver实例的缓冲池可用的最小内存量,Sql server不会在启动时立即分配Min server memory指定的内存量,不过除非降低Min server memory的值,否则内存使用量由于客户端使用达到该值后,Sql server不能分已经分配的缓冲池中释放内存. Sql server 并不一定分配指定的Min server memory,如果Sql server的负荷不需要分配Min server memory指定的内存,Sql server将以较小的内存运行.... max server memory 避免了 SQL Server 缓冲池使用的内存量多于指定的内存量,这样剩余的可用内存可以用来快速启动其他应用程序。SQL Server 不会在启动时立即分配 max server memory 指定的内存量。内存使用量会随着 SQL Server 的需要增加,直到达到 max server memory 指定的值。除非提高 max server memory 的值,否则 SQL Server 不能超过此内存使用量。 在减小 max server memory 值之前,可以使用性能监视器来检查 SQLServer:Buffer Manager 性能对象,并注意 Stolen pages 和 Reserved pages 计数器的当前值。这些计数器将内存报告为 8K 页的数目。应将 max server memory 设置为大于这两个值的和,以免出现内存不足错误。对于合理的最低 max server memory 设置 (MB),近似值为 ([Stolen pages] + [Reserved pages])/ 100。若要减小 max server memory,可能需要重新启动 SQL Server 以释放内存。 |