SQL SERVER的記憶體會不斷增加,問題分析

2021-08-22 03:50:24 字數 2583 閱讀 7954

sql server的記憶體會不斷增加

當 sql server 資料庫引擎在 microsoft® windows nt 或 windows 2000 上執行時,其預設記憶體管理行為並不是獲取特定的記憶體量,而是在不產生多餘換頁 i/o 的情況下獲取盡可能多的記憶體。為此,資料庫引擎獲取盡可能多的可用記憶體,同時保留足夠的可用記憶體以防作業系統交換記憶體。

sql server 例項在啟動時通常獲取 8 到 12 mb 的記憶體以完成初始化過程。當例項完成初始化後,就不會再獲取更多的記憶體,直到使用者連線到該例項並開始產生工作負荷。這時,該例項根據需要不停地獲取記憶體以支援工作負荷。隨著更多的使用者連線並執行查詢,sql server 將獲取支援需求所需的額外記憶體。該例項將繼續獲取記憶體直到達到自身的記憶體分配目標,並且直到達到該目標的下限才會釋放任何記憶體。

為了在不產生多餘換頁 i/o 的情況下獲取盡可能多的記憶體,sql server 的每個例項都設定乙個記憶體獲取目標,直到計算機的可用物理內存在 4 mb 到 10 mb 的範圍內。之所以選擇該範圍是因為測試表明 windows nt 和 windows 2000 都有最小記憶體交換,直到記憶體分配等於可用物理記憶體減去 4 mb。工作負荷處理任務重的 sql server 例項保留的可用物理記憶體為範圍的較低端 (4 mb);工作負荷處理任務輕的例項保留的可用物理記憶體為範圍的較高階 (10 mb)。

sql server 例項的目標隨工作負荷的改變而變化。當更多的使用者連線並產生更多的工作時,該例項傾向於獲取更多的記憶體以使可用的記憶體保持在 4 mb 的限制以下。當工作負荷減輕時,該例項將其目標調整為 10 mb 的可用空間,並釋放記憶體給作業系統。將可用空間量保持在 10 mb 與 4 mb 之間可防止 windows nt 或 windows 2000 過多執行換頁操作,同時使 sql server 得以獲得盡可能最大的高速緩衝儲存器而不至引起額外的交換。

例項的目標記憶體設定與資料庫緩衝池的頁相對於可用池大小的需求有關。在任何即時點,緩衝區頁的總需求取決於滿足所有當前執行的查詢所需的資料頁數。如果相對於高速緩衝儲存器內的頁數,資料頁的需求很大,則當前在緩衝區內的每一頁很可能在相對較短的時間內由新頁替換。這可由"緩衝區管理器"物件的"頁生命期"效能計數器來度量。對於相對較小的緩衝區有較高需求的情況將生成短生命期,而純粹的影響就是使 i/o 增加,因為在頁可由多個邏輯讀取引用之前往往要被重寫。為減輕這個問題,資料庫引擎可以獲取更多的記憶體以增加高速緩衝儲存器的大小。當頁生命期長時,資料庫引擎將可用記憶體定位於目標的高階 (10 mb);而當頁生命期短時,資料庫引擎定位於目標範圍的低端 (4 mb)。

隨著其它應用程式在執行 sql server 例項的計算機上啟動,它們消耗記憶體致使可用物理記憶體量降到 sql server 的目標以下。sql server 例項於是從其位址空間釋放足夠記憶體,以使可用記憶體量回到 sql server 的目標。如果有其它應用程式停止執行而使可用記憶體增多,sql server 例項將增加其記憶體分配大小。sql server 可以每秒釋放並獲取幾 mb 位元組的記憶體,這使它得以根據記憶體分配變化作出快速調整。

你可以通過設定允許sql server可以使用的最大記憶體來做限制:

最小和最大伺服器記憶體的影響

min server memory 和 max server memory 配置選項建立由 sql server 資料庫引擎使用的記憶體量的上限和下限。資料庫引擎並不立即獲取 min server memory 中指定的記憶體量。資料庫引擎啟動時只使用初始化所需的記憶體。隨著資料庫引擎工作負荷的增加,它將繼續獲取支援工作負荷所需的記憶體。資料庫引擎直到到達 min server memory 中指定的記憶體量才會釋放任何所需的記憶體。一旦到達 min server memory,資料庫引擎將使用標準演算法(使作業系統的可用記憶體保持在 4 mb 到 10 mb 之間)獲取和釋放所需記憶體。唯一的區別是資料庫引擎從不將記憶體分配降到 min server memory 所指定的水平下,也從不獲取超過max server memory 所指定水平的記憶體。

資料庫引擎獲取的記憶體量完全取決於放置在例項上的工作負荷。不處理很多請求的 sql server 例項可能永遠達不到 min server memory。

如果為 min server memory 和 max server memory 指定相同的值,則一旦分配給資料庫引擎的記憶體達到該值,資料庫引擎將停止動態釋放和獲取記憶體。

如果在執行 sql server 例項的計算機上頻繁啟動或停止其它應用程式,啟動這些應用程式所需的時間可能會因 sql server 例項分配和釋放記憶體而延長。另外,如果 sql server 是幾個在一台計算機上執行的伺服器應用程式中的乙個,系統管理員可能需要控制分配給 sql server 的記憶體量。在這些情況下,可以使用 min server memory 和 max server memory 選項控制 sql server 可以使用的記憶體量。

何設定固定的記憶體量(企業管理器)

設定固定的記憶體量

展開乙個伺服器組。

右擊乙個伺服器,再單擊"屬性"。

單擊"記憶體"選項卡。

單擊"使用固定的記憶體大小 (mb)",然後將固定記憶體滑塊放在適當的位置。

說明 如果使用預設設定,則 microsoft sql server 將動態配置記憶體。

這是由sql server的記憶體管理機制決定的

為什麼SQLServer資料庫記憶體會不斷增加

當 sql server 資料庫引擎在 microsoft windows nt 或 windows 2000 上執行時,其預設記憶體管理行為並不是獲取特定的記憶體量,而是在不產生多餘換頁 i o 的情況下獲取盡可能多的記憶體。為此,資料庫引擎獲取盡可能多的可用記憶體,同時保留足夠的可用記憶體以防作...

Vim使用心得(會不斷補充)

ga 檢視游標當前字元對應的ascii 十六進製制和八進位制 zz代表 wq zq代表 q 沒有wq 可以自己定義 map wq wq m的輸入在unix linux的vim中 ctrl v 回車 windows的vim中 ctrl q 回車 ab newstr oldstr 定義新的字串替換舊的,...

WordPress使用記憶體不斷增高的解決方法

利用wordpress搭建 時,隨著訪問量的增多,伺服器的使用記憶體會不斷的增加,以至於可能導致記憶體爆滿,崩潰。這主要的原因是因為php fpm,它的fastcgi 程序一旦載入變不會釋放,即使是不適用時,占用fastcgi程序池,等待下一次被喚醒,導致記憶體占用不斷增加。php fpm的一下引數...