SQL Server缓慢RAM,我在哪里开始优化?

可能重复:
SQL Server内存不断增加,从1GB RAM到一周7GB。

你好,

我们有一个相当新的2008年服务器与4GB内存和SQL Server 2008.我们目前正在服务几个网站,每天只能得到约300点击,所以非常低的stream量。

但是,随着时间的推移,RAM会慢慢被SQL Server占用(几天之内),直到有问题的网站缓慢爬行。

唯一修复它的是重新启动SQM服务器进程和应用程序池。

在SQL Server中,最大并发连接数设置为“0” – 无限制。

我的数据库pipe理员离开了,但任何人都可以帮助build议我在哪里/如何开始弄清楚问题在哪里?

非常感谢

您需要检查以确保SQL Server的内存分配已正确设置: http : //support.microsoft.com/kb/321363

另外,检查一下,你没有很多很多连接被打开,没有被处置。 运行sp_who2存储过程,查看连接数是否急剧增加。 如果是这种情况,那么你的代码中有一个错误,你不能正确处理你的连接。

很可能没有任何泄漏。 这是SQL Server的“按devise”行为:将所有物理RAM分配给缓冲池,不会给其他应用程序留下任何东西。 有关详细信息,请参阅我的回复何时可以在同一台计算机上托pipeIIS和SQL Server? (简短的回答: 从来没有 )。

更新

如果你的数据库是20MB,那么罪魁祸首不太可能成为缓冲池。 首先要做的是检查错误日志和系统事件日志中的内存压力发生的那一刻。 每当SQL faisl分配内存,它将转储一个详细的内部分配映射,可以帮助识别任何可能的问题。 此外,您应该开始检查sys.dm_os_memory_clerks,并查看哪些职员随时间增长:

select type, sum(single_page), sum(multi_page) from sys.dm_os_memory_clerks group by type order by sum(single_page+multi_page) desc; 

SQL SERVER 2008 – 内存泄漏,同时存储数百万条logging

有人可以解释我的Windows / SQL Server的内存使用情况

SQL Server 2k5内存消耗

和一个search

除此之外:

  • 你有一个Web和SQL Server的服务器? 不build议

  • 4GB内存是32位或64位。 是3GB,AWE或PAE启用?

  • 你的数据库大小是多less? 它保持了吗?

  • 你有使用像sp_xml_preparedocument这样的代码导致内存泄漏?

  • 最新的服务包等?

默认情况下,SQL Server将使用尽可能多的内存,直到服务器上所有可用的内存。 您可以如下限制使用:

 EXEC sp_configure 'show advanced options', 1 RECONFIGURE WITH OVERRIDE EXEC sp_configure 'max server memory (MB)', 2048 RECONFIGURE WITH OVERRIDE EXEC sp_configure 'show advanced options', 0 RECONFIGURE WITH OVERRIDE 

这里的诀窍是,如果SQL Server与你的网站在同一台机器上(更常见的应该是,而且不是最佳实践),那么SQL Server和IIS将不断地争夺内存。 但是,与IIS不同,SQL Server一旦掌握了内存,就不会喜欢放开内存。 IIS中的应用程序池可以configuration为定期回收/释放内存。 在这里设置一个相当积极的值将帮助您保持应用程序池的大小,但不会处理SQL Server问题。

解决的办法是通过运行脚本(比如上面的RickNZ发布的脚本)来限制SQ​​L Server可以声明的内存量,这将限制SQL Server在2048MB(2GB)时使用的内存 – 即服务器上的一半内存。

正如其他受访者提到的那样:MS SQL Server将自动声明RAM来为其各种caching需求(数据缓冲区,过程caching,惰性写入队列等)提供高达约95%的可用内存空间在它停止之前,操作系统逐渐向前推进。 它本身不是内存泄漏 – SQL Server被devise为默认运行在服务器上的主要应用程序服务。 共享服务器场景绝对是一个“按configuration”的情况。 从磁盘中取回一组新页面的每个数据查询都可能会caching:

  1. 数据页面
  2. 索引页面
  3. 查询计划(如果您的表/索引中的关键数据具有非同类数据分布,并且还计划原始SQL查询,则可能每个存储过程有多个)

如果您希望最小化caching占用空间而不是调整内存,则需要围绕“参数嗅探”,“查询计划caching”以及使用代码对象(如函数和视图)来减less返回到查询的数据量。

希望有所帮助。

Ozziemedes

连接数很重要。

 SELECT COUNT(*) FROM master..sysprocesses 

如果他们的数量永久增长,这是一个不好的迹象。

可能是因为你没有回收你的交易logging。

你有没有机会发出大量的非参数化特设SQL? 如果是这样,你可能对执行计划caching很有乐趣。