为什么 SQL Server 消耗更多的服务器内存?

kom*_*mbo 41 sql-server memory sql-server-2008-r2

SQL Server 占用了我服务器 RAM 的 87.5%。这最近造成了很多性能瓶颈,例如缓慢。我研究了这个问题。我可以在 Internet 上找到的一种常见解决方案是设置 SQL Server 的最大限制。这已经完成并且获得了很大的改进。我想知道为什么如果没有设置最大内存值为什么 SQL Server 不断消耗资源

Tho*_*ger 55

SQL Server 将消耗尽可能多的内存。默认情况下,该数字将包含您机器上 100% 的数字内存。这就是为什么你会看到你所看到的。如果您为 SQL Server 提供 24 GB 内存,那么 SQL Server 将尽最大努力使用 24 GB 内存。然后你有 SQL Server 和操作系统争夺资源,它总是会导致性能不佳。

当您设置max server memory配置限制时,您就限制了 SQL Server 可以为缓冲池(实际上它存储数据页和过程缓存的位置)分配的数量。SQL Server 中还有其他内存管理员,因此对于您的特定版本(2008 R2 及更低版本),max server memory只需控制缓冲池。但这始终是最大的内存消耗者。

关于最小和最大服务器内存影响的 TechNet 参考

min server memory 和 max server memory 配置选项为 Microsoft SQL Server 数据库引擎的缓冲池使用的内存量建立上限和下限。

至于我应该为操作系统留下多少内存的问题,这是一个普遍争论的指标。这真的完全取决于,主要取决于服务器上正在运行的其他进程。前提是它是一个真正的专用服务器(而且几乎从来都不是这样)。我希望操作系统至少有4 GB 内存(在大硬件设备上甚至更多)。但最重要的是,监控有多少未使用的内存。如果您注意到大量可用(可以通过 perfmon 监控)和未使用的内存(当然,总是为那些角落情况留出一个小缓冲区),请放宽一点,并为 SQL Server 提供更多内存。


mrd*_*nny 13

SQL Server 旨在默认使用服务器上的所有内存。这样做的原因是 SQL Server 将数据库中的数据缓存在 RAM 中,以便它可以比每次用户需要时都需要从磁盘读取数据时更快地访问数据。如果我们每次 SQL Server 需要相同的数据时都需要访问磁盘,那么磁盘 IO 要求将非常高。

通常我建议人们为 Windows 留出大约 4 GB 的 RAM,但这实际上取决于服务器上运行的软件数量、您使用的 SQL Server 组件(并非所有组件都遵循该设置)等。


小智 8

这可以立即生效,无需重新启动 SQL:

服务器内存服务器配置选项

使用两个服务器内存选项min server memorymax server memory重新配置 SQL Server 内存管理器为 SQL Server 实例管理的内存量(以兆字节为单位)。默认情况下,SQL Server 可以根据可用的系统资源动态更改其内存要求。

配置固定内存量的步骤 设置固定内存量:

  1. 在对象资源管理器中,右键单击服务器并选择属性。
  2. 单击内存节点。
  3. 在服务器内存选项下,为最小服务器内存和最大服务器内存输入所需的数量。

使用默认设置允许 SQL Server 根据可用的系统资源动态更改其内存要求。min server memory 的默认设置为 0,max server memory 的默认设置为 2147483647 兆字节 (MB)。

我希望这有帮助!