我在一个生产系统上运行着一个 SQL Server 2008 R2 实例。虽然我不是一名数据库管理员,更多的是开发人员,但我的客户目前问我:释放 SQL Server 中的内存回服务器有多重要?如果我们将内存释放回操作系统,会对后续查询实例的性能产生影响吗?
如何准确地“释放”内存呢? 作为一般规则,SQL Server将从操作系统中窃取所有的内存,然后用于自身的目的。详见动态内存管理: Microsoft SQL Server数据库引擎的默认内存管理行为是尽可能获取所需的内存... 实例会根据需要继续获取内存以支持工作负载。当更多用户连接并运行查询时,SQL Server会按需获取额外的物理内存。SQL Server实例会继续获取物理内存,直到达到最大服务器内存分配目标或Windows指示没有多余的空闲内存为止;
为什么你认为需要将内存释放回服务器呢?在大多数情况下,你应该尽可能地分配更多的内存给SQL Server,同时为操作系统和可能需要内存的其他程序留出适当的缓冲区。在理想的情况下,其他程序应该尽量减少或完全消除。SQL Server会逐渐使用它所需的内存,直到达到最大服务器内存设置(尽管在SQL Server 2012之前,这只影响缓冲池分配),并且只有在操作系统要求时才会释放内存。让SQL Server与操作系统争夺内存不会是一个好的情况。