記憶體壓力故障排除 - 如何避免分頁 SQL Server?
我收到了下面的電子郵件,其中指出警報已被觸發,並且
SQL Server 程序記憶體的很大一部分已被調出
我也應該將最小伺服器記憶體提高到 1740 嗎?
Microsoft SQL Server 2005 - 9.00.5000.00 (X64) 2010 年 12 月 10 日 10:38:40 版權所有 (c) 1988-2005 Microsoft Corporation Standard Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)
還有其他應用程序,甚至監視該伺服器上執行的應用程序。
您可以通過查看下圖了解這些應用程序。
我們在下午 12:15:37 收到有關 wrsleic1 預設實例的警報,提示“SQL Server 程序記憶體的重要部分已被調出”。
我們對警報進行了調查,發現 SQL Server 去年曾在 2015 年 4 月 13 日報告過這種情況。SQL Server 目前分配的最大記憶體為 1.7 GB,而伺服器有 4 GB 可用的物理記憶體(以及目前為 5 GB 的動態大小的頁面文件)。
在警報發生時,SQL Server 保留了最大記憶體,但不一定積極使用記憶體的數據。因此,當伺服器檢測到來自外部程序(可能是 IIS,但我們無法追溯確定)的記憶體壓力時,SQL Server 會調整其工作集以適應需求,目前正在使用大約 900 MB。
作業系統負責記憶體管理,SQL Server 旨在響應記憶體釋放請求,就像它在警報時所做的那樣。因此,如果對在此實例上使用託管數據庫的應用程序的性能沒有明顯影響,那麼我們不建議採取任何進一步的措施。
鎖定記憶體中的頁面
尚未為任何 sql server 帳戶啟用記憶體中的鎖定頁面。
我打算改變這個,但是,我決定保留這個伺服器,因為:
- 它在標準版 sql server 2005 SP2 上執行,在這個頁面上它說
標準版 SQL Server 標準版不支持 SQL Server 2005 SP3 累積更新包 4 和 SQL Server 2008 SP1 累積更新包 2“記憶體中的鎖定頁”。
2)啟用後 - 需要根據此頁面重新啟動
問題:“我們需要在 SQL Server 64 位記憶體中鎖定頁面的天氣”?
答案:是的
3)我們應該(希望如此)盡快將此伺服器遷移到 sql server 2014
這個頁面有更多關於記憶體中的鎖定頁面和提醒:
sql server 程序記憶體的很大一部分已被分頁
讓我解釋一下這條消息的含義。這意味著 SQL Server 程序被分頁到磁碟,因為作業系統或在作業系統上執行的應用程序請求了記憶體,而作業系統找不到它的連續塊,因此臨時將 SQL Server 分頁到磁碟,並為請求的程序提供物理記憶體。
如果您閱讀Karthick PK 的部落格,有幾種情況下 SQL Server 程序工作集可能會被 Windows 分頁
- 如果 Windows 沒有在正確的時間和門檻值向所有偵聽程序發送正確的通知。
- 如果 SQL Server 對來自 Windows 的記憶體不足通知的響應速度不夠快。
- 當 SQL Server 收到低物理記憶體通知時,它將通過修剪內部記憶體來縮減其記憶體使用量。此效果持續 5 秒,然後暫停 1 分鐘。這是為了避免任何飢餓/錯誤的應用程序消耗所有記憶體,從而使 SQL Server 不斷擴展其使用量。如果在暫停 1 分鐘後記憶體不足的情況仍然存在,則再次應用該效果。因此,即使在 SQL Server 擴展其使用量 5 秒後仍存在物理記憶體壓力,視窗仍將分頁 SQL Server 的工作集。
- Windows 中所有程序的工作集都被修剪的條件。
- Windows 可能會決定削減一定百分比的各種或特定程序的工作集
為什麼 SQL Server 允許 OS佔用它的記憶體,這就是 SQL Server 的設計方式。
我也應該將最小伺服器記憶體提高到 1740 嗎?
我不知道你從哪裡得到這個想法,min server memory 在這裡沒有任何作用,不要碰它。它的作業系統在這裡面臨記憶體壓力,而不是 SQL Server。
我們在下午 12:15:37 收到有關 wrsleic1 預設實例的警報,提示“很大一部分 sql server 程序記憶體已被調出”。
正如我可以讀到你的問題,你去年收到了這條消息,現在出現了一次。記住它的發生,我建議它不是那麼嚴重的問題,在作業系統上執行的東西有時會要求更多的記憶體,而 SQL Server 會成為受害者。
解決方法
解決方法將在這裡提供 SQL Server 服務帳戶Locked pages in memory 特權。這將避免分頁緩衝池,但非緩衝池仍然可以分頁。
解決方案。
- 找出系統上正在執行並請求更多記憶體的內容。Perfmon 計數器程序:私有字節和工作集可以在這裡派上用場。
或者下載RAMMAP工具,就是有Karthick的部落格,看看記憶體消耗。
- 我能感覺到 SQL Server 機器上執行著其他服務,有時會出現記憶體需求增加的情況,從而迫使作業系統採取艱難的分頁步驟。我建議你也在 Windows 機器上添加更多 RAM