如何控制SQL Server对ram的过度使用?


13

我正在使用的数据库服务器正在运行6个不同的SQL Server实例。它具有48 GB RAM。其中之一正在消耗超过10 GB的RAM,目前总消耗为20 GB。RAM消耗持续增长。在使用40 GB以上的RAM之前的几天,服务器的响应速度非常慢。该应用程序显示保存数据时的崩溃问题。

因此,我重新启动了SQL Server服务。

服务重新启动后,使用率已降至4 GB,但现在正在增长。而且我担心它会在4到5天内增长到40 GB,并使服务器变慢。

我猜服务重启不是一个好选择。

我还从其他来源发现,我们可以设置SQL Server的最大内存使用大小。而且我不确定这是否会有所帮助。我无法对此进行测试,因为服务器正在使用生产数据库,如果在修改SQL Server中的设置时服务停止,则将有风险。

任何人都可以帮助解决这个问题吗?


1
默认情况下,SQL将使用尽可能多的RAM来最大化其性能,这很好-这意味着它将缓存常见的查询和结果,以使您的应用程序更快。它只会使用RAM,直到操作系统报告可能发生分页为止。您可以覆盖此行为。请参阅此MS文档:如何通过使用SQL Server中的配置选项来调整内存使用情况这也可能有用:如何确定正确的SQL Server配置设置

4
不是问题-这是SQL Server的设计和默认行为!是的-重新启动SQL Server进程是一个可怕的主意……SQL Server尽可能在内存中缓存尽可能多的数据和索引页-这样就可以优化整个系统的性能。这就是SQL Server计算机始终应该是专用服务器的原因-除了SQL Server以外,什么都不做。
marc_s 2012年

是的,我知道了。就是这样设计的。但是,当sql server使用大量内存时,这会使服务器变慢,并导致报告超时。所以我想防止sql server使用有限的内存。

4
实际上,如果SQL Server正在使用尽可能多的内存,我想这将使它不太可能难以传送报告。在这种情况下,当您人为地约束SQL Server(或在一个争用资源的框上放置太多实例)时,您会看到由于内存授予和其他问题而引起的问题。
亚伦·伯特兰

但是我不知道为什么它在重新启动sql server服务后突然开始很好地显示报告。是否可能由于没有显示报告而导致太多客户正在使用该应用程序?

Answers:


14

那是设计使然。SQL Server应该使用所有可用的内存,因为它在内存中存储越来越多的数据,因此它不需要回到磁盘上一次又一次地获得相同的内存。

如果需要限制单个SQL Server实例使用的内存量,则可以在SQL Server Management Studio中通过右键单击“对象资源管理器”中的实例名称并选择属性来做到这一点。然后选择内存选项卡,并设置允许SQL Server使用的最大内存量。现在,这不会将SQL Server的所有方面都限制为该数量的内存。这仅控制缓冲池和执行计划缓存。此设置不控制诸如CLR,全文,SQL Server exe文件使用的实际内存,SQL Agent,扩展存储过程等。但是,这些其他事情通常并不需要那么多的内存,缓冲池和执行计划缓存需要大量的内存。

如果您在一个实例上设置此设置,则需要在所有实例上进行设置,以使它们不会互相踩踏。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.