美文网首页
sqlserver占用内存过高,清理办法

sqlserver占用内存过高,清理办法

作者: 2d6b5ee3a71c | 来源:发表于2020-08-07 16:53 被阅读0次

    SQL Server对服务器内存的使用策略是用多少内存就占用多少内存,只用在服务器内存不足时,才会释放一点占用的内存,所以SQL Server 服务器内存往往会占用很高。

    Sql Server运行时候的缓存:
    1.数据缓存:执行个查询语句,Sql Server会将相关的数据页(Sql Server操作的数据都是以页为单位的)加载到内存中来, 下一次如果再次请求此页的数据的时候,就无需读取磁盘了,大大提高了速度。
    2.执行命令缓存:在执行存储过程,自定函数时,Sql Server需要先二进制编译再运行,编译后的结果也会缓存起来, 再次调用时就无需再次编译。

    清除缓存的命令(直接执行第四个命令清除所有缓存):
    DBCC FREEPROCCACHE --清除存储过程相关的缓存
    DBCC FREESESSIONCACHE --会话缓存
    DBCC FREESYSTEMCACHE('All') --系统缓存
    DBCC DROPCLEANBUFFERS --所有缓存
    注意:清除了缓存,不会释放SQL Server所占用的内存,所以需要通过修改SQL Server内存或重启SQL Server服务器来释放内存。

    修改SQL Server内存:


    image.png

    优化:使用以下语句查找出什么语句占内存最高,针对占内存高的语句进行优化
    SELECT SS.SUM_EXECUTION_COUNT,
    T.TEXT,
    SS.SUM_TOTAL_ELAPSED_TIME AS '总和时间',
    SS.SUM_TOTAL_WORKER_TIME AS '执行耗时',
    SS.SUM_TOTAL_LOGICAL_READS AS '总和逻辑读数',
    SS.SUM_TOTAL_LOGICAL_WRITES AS '总和逻辑写'
    FROM (SELECT S.PLAN_HANDLE,
    SUM(S.EXECUTION_COUNT)SUM_EXECUTION_COUNT,
    SUM(S.TOTAL_ELAPSED_TIME)SUM_TOTAL_ELAPSED_TIME,
    SUM(S.TOTAL_WORKER_TIME)SUM_TOTAL_WORKER_TIME,
    SUM(S.TOTAL_LOGICAL_READS)SUM_TOTAL_LOGICAL_READS,
    SUM(S.TOTAL_LOGICAL_WRITES)SUM_TOTAL_LOGICAL_WRITES
    FROM SYS.DM_EXEC_QUERY_STATS S
    GROUP BY S.PLAN_HANDLE
    ) AS SS
    CROSS APPLY SYS.dm_exec_sql_text(SS.PLAN_HANDLE)T
    ORDER BY SUM_TOTAL_LOGICAL_READS DESC

    转自:https://www.cnblogs.com/LuoEast/p/8398406.html

    相关文章

      网友评论

          本文标题:sqlserver占用内存过高,清理办法

          本文链接:https://www.haomeiwen.com/subject/hqzfdktx.html