Sql Server 2008 R2 清理内存的三种方法

本文介绍了针对SQL Server 2008 R2占用内存过大问题的临时优化方法,包括设置计划脚本定时重启服务、启用AWE内存分配、创建定时任务强制释放内存及使用SQL Server Profiler追踪异常SQL语句,以缓解系统内存压力。

公司最近上线一套系统,运行中发现,SQL Server 2008 R2运行越久,占用内存会越来越大,导致最后不得不重启Sql Server来解决,或者是因为Sql 2008本身内存回收机制做的不够好,所以才只能这么强制回收,已向项目方反馈问题点。

暂时优化方法如下:

1,设置计划脚本,闲时定时重启Sql Server。不得已的选择,如果是生产环境,这样如何得了。

net stop sqlserveragent
net stop mssqlserver
net start mssqlserver
net start sqlserveragent

2,设置AWE内存分配机制。记得以前某个版本启用过AWE,好象效果不好,这样先这样设置上去,观察一段时间。

AWE,address windowsing extensions,这是允许32位应用程序分配64GB物理内存,并把视图或窗口映射到2GB虚拟地址空间的限制。

3,通过定时服务定时检查并自动强制释放内存(但我测试好象几乎没有起作用)。

在SQL Serve Agent-->Jobs-->New Job中新建作业

----自动强制释放内存的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

4,追踪调试程序,使用SQL Server Profilter追踪异常SQL语句

SSMS-->Tools-->SQL Server Profilter-->New Trace

A)选择标准模版

B)切到“事件选择”进行跟踪设置

 1) 只保留如下两个事件选项

 2) 点击列筛选

 3) 进行详细筛选设置

    设置CPU时间作为筛选条件,单位毫秒(用于跟踪耗CPU占用较长的查询,可设置为大于等于某个时间如10000,按CPU内核数1000,可以跟踪CPU占用100%大于1秒的查询)

 C)运行追踪即可。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值