我有一个使用 SQL Server 2008 R2 的应用程序。我在客户端遇到了内存消耗问题。每当客户端运行该应用程序时,即使客户端处于待机状态且不使用任何应用程序功能,SQL 服务器也会开始消耗内存。这最终导致客户端在长时间待机后在 PC 上工作速度变慢。
问题是为什么 SQL Server 即使没有工作也会消耗内存,我该如何解决这个问题。
请帮忙。
答案1
就像 Ryan Ries 在评论中说的那样,如果 SQL Server 在与客户端不同的主机上运行,并且客户端存在内存问题,则应用程序需要修复。如果是这种情况,那么我们就没有任何办法可以解决这个问题。调整应用程序需要大量有关应用程序和环境的信息。
关于一般的 SQL Server 内存消耗,这是设计使然。SQL Server 会将尽可能多的数据加载到内存中,以便它能够处理内存中的数据,并将昂贵的磁盘 I/O 操作推迟到绝对必要时。如果您的数据库大于您的物理内存,或者您在同一台主机上运行其他程序,那么您很快就会遇到内存争用。SQL Server 的默认设置是使用尽可能多的内存。
您可以为 SQL Server 设置最大内存值,以便它消耗的内存不超过该数量。通常,如果 SQL Server 是服务器上唯一的程序,我会为操作系统留出 2-4GB 的内存,让 SQL Server 使用其余内存。因此,对于具有 64 GB 内存的机器,我会将 SQL Server 的最大内存设置为 60 GB。
就是这样:
sp_configure 'max server memory (MB)',60000
GO
reconfigure
GO
(这会将最大内存设置为 60GB。当然,请根据服务器的规格设置该值。)
此设置是动态的,因此无需重新启动 SQL Server 实例即可生效。它将在reconigure
执行语句时生效。