我正在对我的数据库进行压力测试,该数据库托管在运行在具有10 GB RAM的64位计算机上的64位SQL Server 2008上。
我有400个帖子。每个线程每秒查询一次数据库,但查询时间不需要花费时间,正如SQL分析器所说的那样,但是18小时后SQL Server使用了7.2 GB的RAM和7.2 GB的虚拟内存。
这是正常行为吗?如何调整SQL Server以清理未使用的内存?
答案 0 :(得分:27)
SQL Server旨在使用尽可能多的内存,通过在内存中缓存大量内容来提高性能。建议使用专用的SQL Server机器,这使得这是一种非常有效的方法,因为它不期望任何其他人需要内存。所以你不应该担心这个;这是完全正常的。
也就是说,如果您使用的是开发计算机而不是实时环境,您可能希望限制内存量以阻止您的计算机被接管。在这种情况下,最简单的方法是打开SQL Server Management Studio,右键单击服务器并选择“属性”,然后在“内存”选项卡上设置最大服务器内存。
答案 1 :(得分:4)
实际上,有一个巧妙的小技巧来获得你正在寻找的东西。问题/问题是,如何让SQL Server“暂时”放弃它可能没有激烈需要的内存,然后让它根据需要重新创建它。
为此,请运行以下脚本:
EXEC sys.sp_configure N'show advanced options', N'1'
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N'max server memory (MB)', N'{low water mark}'
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N'max server memory (MB)', N'{High water mark}'
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N'show advanced options', N'0'
RECONFIGURE WITH OVERRIDE
GO
为{low water mark}和{high water mark}(以MB为单位)输入您自己的值。
这会强制将内存减少到最小量,然后在SQL Server需要/想要它时立即再次打开它。
唯一要做的就是安排脚本定期运行。
建议:
如果没有大量使用SQL Server,请尝试每6小时自动运行一次。如果它被大量使用,则每24小时运行一次(比如在半夜或在白天开始之前)。您的使用会有所不同。
答案 2 :(得分:1)
关闭Greg的答案,配置内存时,请尽量为操作系统留出至少10%的总内存空间。如果SQL在长查询中旋转失控,您希望缓冲区能够远程进入并仍然管理该框。
答案 3 :(得分:0)