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

发布时间 2023-11-29 20:56:24作者: 大西瓜3721

服务器维护中过程中,经常碰到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