SQL Server 不返还内存 - 保持最大服务器内存设置

Séb*_*ien 7 sql-server-2008 sql-server memory

我是唯一一个在这台服务器上工作的人,当我看到 SQL 正在使用服务器的所有可用内存时,我遵循了有关优化 SQL 内存使用的文档。

我所做的步骤之一是将最大内存大小固定为 20 Gb(用于测试目的的服务器,具有 32 Gb 内存)。

调整后,昨天,SQL Server 只使用了 3-4 Gb,但今天,它再次达到了我分配的最大内存使用量。

为什么 SQL Server 保留所有 20 Gb?如果已经使用了最大内存大小,当用户开始使用服务器时会发生什么?

Aar*_*and 17

它保存着那个记忆,因为你用过一次,所以很明显,你可能会再次使用它。这就是 SQL Server 的工作方式:它将占用它需要的内存(最多达到您允许的最大值),并且仅在操作系统需要时才将其返还给操作系统。如果您不要求从 SQL Server 取回内存,您为什么希望它放弃呢?分配和释放内存的效率很低,而且 SQL Server 的设计目的不是为了将内存归还给您,因此您可以让它闲置。出于类似的原因,它不会在您删除或重新组织数据后自动为您缩小文件:增长/缩小操作的成本很高,而且如果文件明天又要增长......

如果您在笔记本电脑上运行 SQL Server,并且需要为其他任务提供内存,那么您应该考虑设置较低的最大服务器内存设置。这样 SQL Server 永远不会侵占您认为需要的内存。

如果您在服务器上运行 SQL Server,那么它喜欢成为包装盒上唯一的东西。如果服务器托管其他需要内存的应用程序等,那么您可以进一步减少最大服务器内存,或将这些应用程序移至另一台服务器。如果没有其他应用程序需要内存,那么您为什么要关心它使用的是 20 GB、16 GB、12 GB 还是 100 MB?您是否打算将剩余内存暂时出租给其他服务器,直到 SQL Server 再次需要它?你不是给了它 20 GB 的内存,所以它会使用 20 GB 的内存吗?

您完全没有理由担心 SQL Server 正在使用您告诉它可以使用的内存量。这正是它应该如何工作的。当用户对服务器运行查询时,他们可能会访问内存中已经存在的数据(SQL Server 的大部分内存分配是缓冲池)。如果您的数据库比 20 GB 大很多,那么您可以考虑实际提高最大服务器内存设置以充分利用内存,以及有多少 I/O 来自那里而不是磁盘(这会慢很多) . 人为地降低最大服务器内存,因为您认为 Windows 需要 12 GB 的内存才能运行就像分页到磁盘一样 - 您

同样,如果服务器上没有运行其他任何东西,则没有理由需要超过 3 或 4 GB 的操作系统空间,而将其他一切留给 SQL Server。同样,如果您将 SQL Server 的最大内存设置为 28 GB,您不必担心,并且即使在所有用户都回家后它仍然“使用”28 GB。这只是意味着在早上不需要任何工作就可以恢复到 28 GB。