代码之家  ›  专栏  ›  技术社区  ›  Ahmed

SQL Server 2008占用了大量内存?

  •  11
  • Ahmed  · 技术社区  · 16 年前

    我正在我的数据库上进行压力测试,该数据库托管在SQL Server 2008 64位上,运行在一台64位计算机上,内存为10 GB。

    我有400根线。每个线程每秒查询一次数据库,但查询时间并不需要时间,正如SQL事件探查器所说的那样,但在18小时后,SQL Server将占用7.2 GB的RAM和7.2 GB的虚拟内存。

    这是正常行为吗?如何调整SQL Server以清除未使用的内存?

    4 回复  |  直到 12 年前
        1
  •  27
  •   Greg Beech    16 年前

    SQL Server的设计目的是尽可能多地使用内存,通过在内存中缓存大量的内容来提高性能。建议使用专用的SQL Server机器,这使得这是一种完全有效的方法,因为它不希望其他人需要内存。所以你不应该担心这个,这是完全正常的。

    也就是说,如果您使用的是开发机器而不是实时环境,那么您可能希望限制内存量,以阻止您的设备被接管。在这种情况下,最简单的方法是打开SQL Server Management Studio,右键单击服务器并选择“属性”,然后在“内存”选项卡上设置最大服务器内存。

        2
  •  4
  •   Jason Plank Maksim Kondratyuk    14 年前

    事实上,有一个很好的小技巧来获得你想要的东西。问题/问题是,如何使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
    

    输入您自己的低水位线和高水位线(MB)值。

    这将强制将内存减少到最小值,然后如果SQL Server需要/想要它,则立即再次打开它。

    剩下要做的唯一一件事就是定期调度脚本运行。

    建议:

    如果SQL Server没有大量使用,请尝试每6小时自动运行一次。如果它被大量使用,每24小时运行一次(比如说在午夜或白天开始之前)。您的用法会有所不同。

        3
  •  1
  •   SQLChicken    16 年前

    从Greg的答案出发,当您配置内存时,尝试为操作系统保留至少10%的总内存。如果SQL在一个长查询上失去控制,您希望缓冲区能够远程进入并仍然管理该框。

    推荐文章