• 如何清理SQL SERVER内存解决内存占用高的问题


     服务器维护中过程中,经常碰到SQL SERVER 内存占用高的问题,让人非常头疼。

          第一种方法,可以通过重启SQL SERVER服务释放内存,但是生产服务器环境一般不允许随便重启  SQL SERVER服务。

          第二种方法,通过设置服务器最高内存值的方法来释放内存,具体操作是先把服务器最大内存设置成一个小值,但不能太小,太小容易使SQL SERVER挂掉,然后再把服务器最大内存值设置回合适的值,建议占服务器总内存的80%。

          第三种方法,通过定时服务定时检查并自动强制释放内存。

          本文主要介绍第三种方法的具体操作步骤。

    如何清理SQL SERVER内存解决内存占用高的问题
     

    工具/原料

     
    • Microsoft SQL Server Management
    • SQL Server

    方法/步骤

     
    1.  

      登陆SQL Server。

      如何清理SQL SERVER内存解决内存占用高的问题
    2.  

      准备自动强制释放内存的SQL脚本。

      本文结束后有SQL脚本内容。

      如何清理SQL SERVER内存解决内存占用高的问题
    3.  

      选中SQL SERVER代理下级作业节点右键新建作业。

      作业名称填“每天凌晨3点定时清理内存”。

      如何清理SQL SERVER内存解决内存占用高的问题
      如何清理SQL SERVER内存解决内存占用高的问题
    4.  

      配置作业的步骤。

      在新建作业弹出窗口中,选步骤页面,按下图中的7个步骤完成配置后点确定。

      如何清理SQL SERVER内存解决内存占用高的问题
    5.  

      配置作业的计划。

      在新建作业弹出窗口中,选计划页面,按图中的9个步骤完成配置后点确定。

      如何清理SQL SERVER内存解决内存占用高的问题
    6.  

      完成作业的计划配置后,点确认,每天凌晨3点定时清理内存的定时作业就完成了配置了。

      如何清理SQL SERVER内存解决内存占用高的问题
      如何清理SQL SERVER内存解决内存占用高的问题
    7.  

      总结操作步骤:

      1.    登陆SQL Server。

      2.    准备自动强制释放内存的SQL脚本。

      3.    选中SQL SERVER代理下级作业节点右键新建作业。

      4.    配置作业的步骤。

      5.    配置作业的计划。 

      6.    完成作业的计划配置后,点确认,每天凌晨3点定时清理内存的定时作业就完成了配置了。

    8.  

      第二种方法,通过设置服务器最高内存值的方法来释放内存,具体操作是先把服务器最大内存设置成一个小值,但不能太小,太小容易使SQL SERVER挂掉,然后再把服务器最大内存值设置回合适的值,建议占服务器总内存的80%。

      请查看本人写的另一篇经验

    9.  

      附加参考内容。

      ----自动强制释放内存的SQL脚本

      DECLARE @TargetMemory decimal(19,2),@TotalMemory decimal(19,2),@UseMemoryPecent decimal(19,2)

      SELECT @TargetMemory=cntr_value FROM sys.dm_os_performance_counters 

      WHERE counter_name='Target Server Memory (KB)'

      SELECT @TotalMemory=cntr_value FROM sys.dm_os_performance_counters 

      WHERE counter_name='Total Server Memory (KB)'

      SET @UseMemoryPecent=@TotalMemory/@TargetMemory

      SELECT @UseMemoryPecent

      IF @UseMemoryPecent>0.1

      BEGIN

       --清除存储过程缓存

              DBCC FREEPROCCACHE 

      --清除会话缓存  

              DBCC FREESESSIONCACHE 

      --清除系统缓存  

              DBCC FREESYSTEMCACHE('All')

      --清除所有缓存  

              DBCC DROPCLEANBUFFERS  

      --打开高级配置  

              EXEC sp_configure 'show advanced options', 1  

      --设置最大内存值,清除现有缓存空间  1000 M  (根据实际情况设置,具体思路是最大值先调小,然后再设回合适的值。)

              EXEC sp_configure 'max server memory', 1000

              EXEC ('RECONFIGURE')  

      --设置等待时间,强制释放内存需等待一些时间

              WAITFOR DELAY '00:01:30'  

      --重新设置最大内存值  3000 M   根据实际情况设置,具体思路是最大值先调小,然后再设回合适的值。)

              EXEC sp_configure 'max server memory', 3000  

              EXEC ('RECONFIGURE')  

      --关闭高级配置  

              EXEC sp_configure 'show advanced options', 0 

                   

      END

  • 相关阅读:
    606. Construct String from Binary Tree 【easy】
    520. Detect Capital【easy】
    28. Implement strStr()【easy】
    521. Longest Uncommon Subsequence I【easy】
    线程,进程,任务
    nginx for windows中的一项缺陷
    nginx在windwos中的使用
    关于wxwidgets图形界面的关闭窗口的按钮无效的解决办法
    进程与线程之间的资源的关系
    关于函数可重入需要满足的条件
  • 原文地址:https://www.cnblogs.com/Alex80/p/13846109.html
Copyright © 2020-2023  润新知