如何清理SQL SERVER內存解決內存占用高的問題


 服務器維護中過程中,經常碰到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.  

    附加參考內容。

     

     

     

    ----自動強制釋放內存的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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM