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


36

SQL Server占用了我的服务器RAM的87.5%。最近,这引起了许多性能瓶颈,例如速度缓慢。我研究了这个问题。我可以在互联网上找到的一种常见解决方案是设置SQL Server的最大限制。这样做已经取得了很大的进步。我想知道为什么如果未设置最大内存值,为什么SQL Server会继续消耗资源


3
您如何确定SQL Server对RAM的使用是任何瓶颈的根源?慢什么?如果有的话,如果SQL Server 使用尽可能多的RAM(甚至比您期望或希望的更多),它应该会更有效率。并且,如果服务器上还有其他应用程序由于SQL Server正在使用内存而遭受苦难(如设计那样),请将它们移到另一台服务器上
亚伦·伯特兰

我在这里使用过此方法lucidica.com/help/got-sql-eating-up-ram让我知道是否有帮助:)亲切的问候,尼基塔。
Nikita Kosousov,2015年

Answers:


48

SQL Server将消耗尽可能多的内存。默认情况下,该数字将包含计算机上100%的数字内存。这就是为什么您看到自己所看到的。如果为SQL Server提供24 GB的内存,则SQL Server将尽力使用24 GB的内存。然后,您需要SQL Server和OS来争夺资源,这总是会导致性能下降。

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

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

最小服务器内存和最大服务器内存配置选项确定Microsoft SQL Server数据库引擎的缓冲池使用的内存量的上限和下限。

至于我应该为OS保留多少内存的问题,这是一个经常争论的指标。实际上,这完全取决于服务器上正在运行的其他进程。如果它是一台真正的专用服务器(几乎从来没有这样)。我希望看到该操作系统至少有 4 GB的内存(在大型硬件盒上甚至更多)。但最重要的是,监视有多少未使用的内存。放宽手脚,如果注意到大量可用(可以通过perfmon进行监视)和未使用的内存(当然,对于那些紧急情况总是留有很小的缓冲区),请给SQL Server更多的内存。


11

默认情况下,SQL Server设计为使用服务器上的所有内存。这样做的原因是,SQL Server将数据缓存在RAM中的数据库中,以便它比每次用户需要时都需要从磁盘读取数据的访问速度更快。如果每次SQL Server在磁盘上反复需要相同的数据时都需要访问磁盘,那么对IO的要求将非常高。

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


6

这可以立即运行,而无需重新启动SQL:

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

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

配置固定内存量的过程要设置固定内存量:

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

使用默认设置允许SQL Server根据可用的系统资源动态更改其内存要求。最小服务器内存的默认设置为0,最大服务器内存的默认设置为2147483647兆字节(MB)。

我希望这有帮助!



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.