SQL SERVER的記憶體會不斷增加,問題分析(轉)
SQL SERVER的記憶體會不斷增加,問題分析(轉)[@more@] 當 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的記憶體管理機制決定的。
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的記憶體管理機制決定的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-962306/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQLServer記憶體問題分析SQLServer記憶體
- Windbg分析高記憶體佔用問題記憶體
- Java記憶體問題 及 LeakCanary 原理分析Java記憶體
- SQL Server database mail問題診斷一例SQLServerDatabaseAI
- 雲伺服器會增加記憶體嗎?伺服器記憶體
- Linux記憶體不夠了?看看如何開啟虛擬記憶體增加記憶體使用量Linux記憶體
- SQL Server為什麼這麼耗記憶體SQLServer記憶體
- 【問題排查系列】JDK1.8 下記憶體不斷增長排查及解決JDK記憶體
- 利用Windbg分析高記憶體佔用問題記憶體
- 【JVM故障問題排查心得】「記憶體診斷系列」JVM記憶體與Kubernetes中pod的記憶體、容器的記憶體不一致所引發的OOMKilled問題總結(下)JVM記憶體OOM
- 【JVM故障問題排查心得】「記憶體診斷系列」JVM記憶體與Kubernetes中pod的記憶體、容器的記憶體不一致所引發的OOMKilled問題總結(上)JVM記憶體OOM
- 分析ThreadLocal的弱引用與記憶體洩漏問題thread記憶體
- 排查Java的記憶體問題Java記憶體
- 故障分析 | 租戶 memstore 記憶體滿問題排查記憶體
- 使用 Chrome 開發者工具分析記憶體問題Chrome記憶體
- 跨工程編譯orbslam3記憶體中斷問題編譯ORBSLAM記憶體
- 記一次 rr 和硬體斷點解決記憶體踩踏問題斷點記憶體
- SQL問題診斷SQL
- 探究 iOS 記憶體問題iOS記憶體
- c語言強制記憶體轉化引發的問題C語言記憶體
- 使用Windbg快速分析應用記憶體洩露問題記憶體洩露
- 【C】 42_記憶體操作經典問題分析 二記憶體
- 【C】 41_記憶體操作經典問題分析 一記憶體
- iOS 解決設定rootViewController 記憶體不釋放問題iOSViewController記憶體
- iOS開發筆記— 資料庫、Crash、記憶體問題分析iOS筆記資料庫記憶體
- 使用 Chrome Dev tools 分析應用的記憶體洩漏問題Chromedev記憶體
- SHARED POOL中KGH: NOACCESS佔用大量記憶體的問題分析記憶體
- 記憶體分配問題處理記憶體
- ThreadLocal記憶體洩漏問題thread記憶體
- JVM面試問題系列:深入詳解JVM 記憶體區域及記憶體溢位分析JVM面試記憶體溢位
- 解決golang 的記憶體碎片問題Golang記憶體
- SQL Server中datetimeset轉換datetime型別問題淺析SQLServer型別
- 使用RAMMap+PoolMon分析Windows記憶體異常使用問題Windows記憶體
- 淺談SQL Server中的快照問題SQLServer
- Android Studio Profiler Memory (記憶體分析工具)的簡單使用及問題Android記憶體
- Java記憶體模型FAQ(五)舊的記憶體模型有什麼問題?Java記憶體模型
- project中的堆疊記憶體,記憶體地址引用,gc相關問題Project記憶體GC
- AS Notes|記錄日常開發遇到的 AS 問題(不斷更新。。。
- 告別記憶體OOM,解決MySQL記憶體增長問題記憶體OOMMySql