我想我在这里有一个很多人可能遇到过的基本问题。当我在 SQL Server 中运行查询时,它将在内存中加载查询执行所需的所有数据(例如,如果存在联接,那么它将从这两个表加载必要的数据),但是当查询完成执行内存时SQL Server 消耗的数据不会被释放。
我注意到这一点是因为几天前我正在分析一个占用大量资源的查询tempdb
空间。当我运行查询时,它(在执行结束时)会消耗高达 25 GB 的 RAM。除非我重新启动,否则这 25 GB RAM 不会被释放MSSQLSERVER
服务。
你们是如何进行 SQL Server 内存管理的?这显然是一个问题吧?
我还想听听您是否执行某些特定操作来清除单个查询占用的内存。
提前致谢!
SQL Server 确实被设计为请求尽可能多的 RAM,除非操作系统明确需要这些内存,否则不会释放这些 RAM。我认为最好的方法是限制服务器可以使用的 RAM 量,这将允许操作系统无论如何都可以使用一定数量的资源。要设置此如何使用 SQL Server Management Studio 配置内存选项 http://msdn.microsoft.com/en-us/library/ms178067.aspx:
使用两个服务器内存选项,最小服务器内存 and 最大服务器内存,重新配置 SQL Server 内存管理器为 SQL Server 实例管理的内存量(以兆字节为单位)。
- 在对象资源管理器中,右键单击服务器并选择特性.
- 点击Memory node.
- Under 服务器内存选项,输入您想要的金额最小服务器内存 and 最大服务器内存.
您还可以使用以下命令在 T-SQL 中执行此操作(示例):
exec sp_configure 'max server memory', 1024
reconfigure
将消耗限制在 1GB。
注意:上述内容不会将 SQL Server 的所有方面限制为该内存量。这只控制缓冲池和执行计划缓存。 CLR、全文、SQL Server .exe 文件使用的实际内存、SQL 代理、扩展存储过程等不受此设置控制。然而,这些其他东西通常不需要那么多内存,缓冲池和执行计划缓存需要大量内存。
我希望这有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)