专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

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

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 1:08:21       共计:3661 浏览
公司最近上线一套系统,运行中发现,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)运行追踪即可。

 
版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:Redis总结(二)C#中如何使用redis | ·下一条:C#:获取访问端口号

Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有