情况是这样的,
我写了一些存储过程,压力测试的时候数据库占的内存会不断增加
1. 没有使用游标,所以没有忘释放的游标2. 数据量比较大,采用的是增量运算,每次记下上一次计算的最后一条,然后从后一条开始匹配和计算
3. 计算量比较大(sql里面进行的大量的join操作,以及对数据的统计),大量用到了临时表
4. sqlserver内存增长很快,设置了最大可占用的内存数,但是无效,会突破那个值继续增加
5. 停止全部操作之后,内存不会下降
6. 每句话后面尝试了commit,内存还是增长很快我想请问一下,怎样才能控制内存的增长?  无论是强迫其回收或者设置最大值都可以

解决方案 »

  1.   

    存储过程编辑后,会保留在内存里.
    试试:
    --强制释放内存  
    --清除所有缓存  
    DBCC DROPCLEANBUFFERS  
    --打开高级配置  
    exec sp_configure 'show advanced options', 1  
    --设置最大内存值,清除现有缓存空间  
    exec sp_configure 'max server memory', 256  
    EXEC ('RECONFIGURE')  
    --设置等待时间  
    WAITFOR DELAY '00:00:01'  
    --重新设置最大内存值  
    EXEC  sp_configure 'max server memory', 4096  
    EXEC ('RECONFIGURE')  
    --关闭高级配置  
    exec sp_configure 'show advanced options',0  
    GO  
      

  2.   

    mssql服务器的总体内存占用量是可以设置上限的:服务器的属性-内存里
      

  3.   

    1、限制内存大小,如下图,特别是最大内存:2、了解内存大的原因,任何关系数据库管理系统都占内存,因为要缓存大量数据和执行计划。
    3、可以使用性能计数器做一个长时间的监控,看看内存的行为是否正常,如何使用最好参考:《SQLServer 2008 企业级平台管理》。
    4、优化各个代码,使其运行时占用更少资源。
    5、在预算允许的情况下,增大物理内存。
      

  4.   

    在sql server服务器属性设置可以控制内存值的大小的,大量的内存缓存的sql server的查询数据。
    只有停止服务就可以释放缓存中占有的内存,commit只能代表事物的结束。
      

  5.   

    对不起,我对sqlserver的管理不熟,只能盲目复制你的代码上去执行
    爆出如上的错误
    重启sqlserver之后设置的上限值不起作用
      

  6.   

    内存增长是正常的,而且'max server memory'只是限制BUFFER POOL的大小,还有其他的部分会使用内存,所以总的内存使用会大于'max server memory'
      

  7.   

    内存是SQL Server的生命线,所以内存占用越多,对SQL Server性能提升越有帮助。
    如果要限制内存,可以使用max server memory来配置buffer pool最大内存上限,这个基本上也就限制了SQL Server内存,SQL 其它部分占用的内存相对来讲比较少的。
      

  8.   

    200M对于mssql,是太少了一点
    是测试机?数据库文件有多大?
      

  9.   


    这只是做个测试而已,个人电脑的虚拟机里,不到10分钟已经到1G以上了,真实server上的速度要快得多