我有一个 SQL Server 实例,它的内存使用量逐渐增加,直到 Windows 不再提供内存。偶尔的大型查询结果会导致实例增长,这似乎是合乎逻辑的。
有什么方法可以让我说服 SQL Server 释放不再需要的内存(除了重新启动服务)?
编辑:
我正在使用 SQL Server 2000 SQL Server 8.00.2039 - SP4(标准版)
我能够使用以下查询找到答案:
SELECT 'SQL Server '
+ CAST(SERVERPROPERTY('productversion') AS VARCHAR) + ' - '
+ CAST(SERVERPROPERTY('productlevel') AS VARCHAR) + ' ('
+ CAST(SERVERPROPERTY('edition') AS VARCHAR) + ')'
答案1
这正是 SQL Server应该上班。
如果您在该计算机上有其他服务,并且不希望 SQL 占用所有可用内存,则需要设置最大服务器内存。请参阅SQL Server 内存选项在 MSDN 上。
答案2
其他发帖者说得对,这是设计使然,但你绝对希望将最大内存限制为略小于服务器的 RAM。想想以下事件顺序:
- SQL 2000 运行顺利,消耗了服务器的所有 RAM
- 有人通过 RDP 访问,或者你必须打开 IE 下载补丁,或者你的备份启动,等等
- SQL 必须释放足够的内存,以便操作系统正常运行
- 释放内存和分页到磁盘时性能很差
- 一旦稳定,一切都会顺利
- 另一个操作完成,SQL 逐渐回收释放的 RAM
- 重复
为了避免这种情况,请将最大服务器内存限制配置为实际物理内存的 80-90% 左右。SQL 2000 的说明位于:http://msdn.microsoft.com/en-us/library/ms178067.aspx
答案3
只有当操作系统发出 RAM 不足的信号,或者您停止并重新启动服务时,它才会释放它;要做的是通过配置“最大服务器内存”值来限制 SQL 将使用的最大量。如果服务器上没有其他需要 RAM 的东西(希望没有),我就不会担心它。
答案4
SQL Server 将消耗内存,除非操作系统告知它内存压力,否则不会归还内存。正如 Portman 所指出的,这是设计使然,如果您想限制内存消耗,则需要设置 SQL Server 将使用的最大服务器内存。