调用sql的应用程序都退出了,sql进程的内存根本不释放。确实在这种情况下,相同的查询不再像第一次执行那样耗时。是不是sql把查询的内容都存在了内存里?怎样才能让他定期释放内存呢?我写了好多sp,里面有临时表,是否在最后要drop那些临时表就可以释放呢?

解决方案 »

  1.   

    ---我写了好多sp,里面有临时表,是否在最后要drop那些临时表就可以释放呢?
    这个是不会释放内存的。最好还是写个批处理文件把sql服务重新启动,这样会释放内存
    a.bat
    stop sqlserver
    start sqlserver
    把此把此批处理文件加入到操作系统的计划中,具体在对sql server 不应用的启动服务,具体的时间。
      

  2.   

     我倒是想知道为什么你期望 sql server 会释放内存,sql server 本来就是会增加内存到
     那个设定值后 就一般不会释放,如果想释放 就重新 设置一个比较小的内存值,然后重启服务。
      

  3.   

    设置内存上限就可以了,SQL会自动管理它占用的内存
    内存上限设置在服务器设置页面,输入正确数据就可以,注意要留一定内存给操作系统,有8G内存上限设置6144(6G)就可以了
      

  4.   

    MSSQL占了内存一般不释放,只有在系统内存不够用,别的程序又要内存的时候才会释放。
    配置内存上限可以限制MSSQL使用的内存总数,如果想详细了解这块的设置,可以去MSDN搜索一下,有相关的文章。
      

  5.   

    这个应该是BUG吧,死锁啦,不是释放内存的问题,8G都占用堪称海量。
      

  6.   

    SQL是比較占內存的,SP裡面的臨時表,最好是刪除掉。
    刪除臨時表的語句
    IF NOT OBJECT_ID('TEMPDB..臨時表') IS NULL DROP TABLE 臨時表
      

  7.   

    sql server不会释放内存的,除非重启服务
      

  8.   

    目前有效的方法:通过批处理重启SQL服务:net stop sqlserveragent
    net stop MSSQLServer
    net Start  MSSQLServer
    net Start  sqlserveragent
    exit说明:MSSQLServer:是SQL必要的服务,sqlserveragent:是SQL的代理服务,如果服务器不需要运行代理,可以不加入批处理.然后在任务计划把改批处理添加进去,这样就做到每天定时重启SQL服务了。
      

  9.   

    "连登陆都登不上"
    那一定是设计出了问题
    SP里的临时对象不需要显式DROP有偿支持
      

  10.   

    sp_configure 'show advances options' 1
    reconfigure
    go
    sp_configure 'awe enable' 1
    reconfigure
    go
    sp_configure 'max server memory', 6000(设置为你想要限制的内存,单位是M)
    reconfigure
    GO