摘要:本文讨论了SQL SERVER内存占用高的问题,并介绍了三种解决方法。重点讲述了第三种方法:通过SQL Server Management Studio配置定时作业,使用SQL脚本自动定时清理内存,确保每天凌晨3点执行,以减少内存占用。同时,也提及了第二种方法
本文讨论了SQL SERVER内存占用高的问题,并介绍了三种解决方法。重点讲述了第三种方法:通过SQL Server Management Studio配置定时作业,使用SQL脚本自动定时清理内存,确保每天凌晨3点执行,以减少内存占用。同时,也提及了第二种方法,即通过调整服务器最高内存值来释放内存,并提供了详细的脚本示例。
服务器维护中过程中,经常碰到SQL SERVER 内存占用高的问题,让人非常头疼。
第一种方法,可以通过重启SQL SERVER服务释放内存,但是生产服务器环境一般不允许随便重启 SQL SERVER服务。
第二种方法,通过设置服务器最高内存值的方法来释放内存,具体操作是先把服务器最大内存设置成一个小值,但不能太小,太小容易使SQL SERVER挂掉,然后再把服务器最大内存值设置回合适的值,建议占服务器总内存的80%。
第三种方法,通过定时服务定时检查并自动强制释放内存。
本文主要介绍第三种方法的具体操作步骤。
----自动强制释放内存的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')
--设置等待时间,强制释放内存需等待一些时间
WAITFORDELAY'00:01:30'
--重新设置最大内存值 3000 M 根据实际情况设置,具体思路是最大值先调小,然后再设回合适的值。)
EXEC sp_configure 'max server memory', 3000
--关闭高级配置
EXEC sp_configure 'show advanced options', 0
来源:小园说科技