如何清理SQL SERVER内存解决内存占用高的问题
金蝶云社区-╄秋メ凋零
╄秋メ凋零
2人赞赏了该文章 1,654次浏览 未经作者许可,禁止转载编辑于2024年09月14日 10:00:19
summary-icon摘要由AI智能服务提供

本文讨论了SQL SERVER内存占用高的问题,并介绍了三种解决方法。重点讲述了第三种方法:通过SQL Server Management Studio配置定时作业,使用SQL脚本自动定时清理内存,确保每天凌晨3点执行,以减少内存占用。同时,也提及了第二种方法,即通过调整服务器最高内存值来释放内存,并提供了详细的脚本示例。

服务器维护中过程中,经常碰到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. 附加参考内容SqlScript。
----自动强制释放内存的SqlScript脚本

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

本文转载自:https://www.cnblogs.com/Alex80/p/17865813.html

作者:大西瓜3721

原文链接:https://www.cnblogs.com/Alex80/p/17865813.html

图标赞 2
2人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!