none
SQL Server 2008 標準版 x64 記憶體釋放問題 RRS feed

  • 問題

  • 各位先進大家好

    SQL 2008平常並沒有耗太多效能,掛在IIS上的網頁(.net 2.0開發)執行SQL時會瞬間花掉CPU及RAM的資源,當然跑完之後CPU就恢復正常,但RAM竟不會釋放,雖然每次耗掉的記憶體並不大,但累積下來也很恐怖,也就是說當我執行200次可能記憶體就會吃到將近100%,當然這要看我記憶體有多大,我的疑問就是如何讓SQL 2008正常的釋放掉已跑完的資源(RAM)呢?

     

    2010年6月18日 上午 07:10

解答

  • SQL Server預設行為就是當達到Max Server Memory或System Memory不足才會自動開始釋放buffer pool(記憶體),

    當然你也可以手動強制處理釋放動作

    DBCC FREESYSTEMCACHE ('ALL');

    DBCC FREEPROCCACHE;

    但這樣會有個狀況發生,假設前端AP第一次撈一百萬筆資料花15 sec(這時全在buffer pool),那第二次要在搜尋相同一百萬筆資料只會更快(假設3 sec),因為SQL Server不用在重新評估該SQL statement執行計畫、計算統計值和data,如果你強制清除buffer pool,我想每次前端AP撈資料都要花15sec,你自行決定那種比較符合你的效益。

     



    • 已標示為解答 你好LiiHo 2010年6月18日 上午 09:23
    2010年6月18日 上午 08:06
    版主

所有回覆

  • Hi ricoisme

    我知道可以設定max server memory但如何才能讓SQL自動正常釋放已經用完的RAM,否則不管設定多少最後都是會吃到滿(吃到我設定的值),這樣就算OS還剩下我保留的記憶體,但後續資料庫再做大量處理還是會因為已經吃到max server memory的值沒有正常釋放掉而變慢。

    2010年6月18日 上午 07:41
  • SQL Server預設行為就是當達到Max Server Memory或System Memory不足才會自動開始釋放buffer pool(記憶體),

    當然你也可以手動強制處理釋放動作

    DBCC FREESYSTEMCACHE ('ALL');

    DBCC FREEPROCCACHE;

    但這樣會有個狀況發生,假設前端AP第一次撈一百萬筆資料花15 sec(這時全在buffer pool),那第二次要在搜尋相同一百萬筆資料只會更快(假設3 sec),因為SQL Server不用在重新評估該SQL statement執行計畫、計算統計值和data,如果你強制清除buffer pool,我想每次前端AP撈資料都要花15sec,你自行決定那種比較符合你的效益。

     



    • 已標示為解答 你好LiiHo 2010年6月18日 上午 09:23
    2010年6月18日 上午 08:06
    版主
  • 了解,看起來應該是可以值得一試,謝謝。

    2010年6月18日 上午 09:23