SQLServer因為OS虛擬記憶體不足而hang住異常解決-鎖定記憶體頁 (LPIM)
異常:
DB: SQL Server2012SP3
OS: Windows2012
一線工程師反應系統訪問DB突然卡住了,DBA登入DB檢查SQLServer發現DB無法登入,之前SMSS已經連線的session中無法執行任何SQL。伺服器CPU使用10%,memory使用達到了99%以上。過了十分鐘系統memory自己降低到了90%以下,DB可以訪問。
分析:
檢查SQLServer error log:
只是在一異常時間段有stack dump的記錄,但沒有太多有價值的資訊
檢查windows效能計數器:
異常時間段OS memory確實耗盡
檢查windows log:
有虛擬記憶體不夠警告,
sqlserver.exe程式使用28GB(DBA設定的DB最大記憶體使用量),dllhost.exe程式使用12GB
正好把伺服器的32GB+虛擬記憶體設定的8GB佔滿!所以報錯記憶體不足!!
解決:
上述dllhost.exe程式使用12GB一定存在問題,此塊可能系統層面補丁或病毒相關,已交給系統工程師分析。
但是否有辦法在OS記憶體不足時,DBA透過設定可以不影響到SQL server的正常執行呢?
答案是有的,軟微官方提供鎖定記憶體頁 (LPIM) 解決方法,透過Windows 策略將確定哪些帳戶可以使用程式將資料保留在實體記憶體中,從而阻止系統將資料分頁到磁碟的虛擬記憶體中。這樣即使OS記憶體不足時對SQL server的影響也會是最小了。
設定:
cmd->gpedit.msc->local computer policy->computer configuration->windows settings->security settings->local policies->user rights assignment-> Lock pages memory中加入新增 SQL Server 啟動帳戶
至此,鎖定記憶體頁 (LPIM)設定完成。
再持續觀察一段時間,系統再沒有發生系統記憶體不足SQLServer hang住問題。
------------------------------------------------------------ ------------------------------------------
以下附,軟微官方文件說明:
鎖定記憶體頁 (LPIM)
此 Windows 策略將確定哪些帳戶可以使用程式將資料保留在實體記憶體中,從而阻止系統將資料分頁到磁碟的虛擬記憶體中。 鎖定記憶體中的頁可以在發生將記憶體分頁到磁碟時保持伺服器的響應能力。 已向有權執行 sqlservr.exe 的帳戶授予 Windows 鎖定記憶體頁 (LPIM) 使用者許可權時,在 SQL Server Standard Edition 和更高版本的例項中將“鎖定記憶體頁” 選項設定為“開啟” 。
若要對 SQL Server 禁用“鎖定記憶體頁”選項,請為有權執行 sqlservr.exe( SQL Server 啟動帳戶)啟動帳戶的帳戶刪除“鎖定記憶體頁”使用者許可權 。
設定此選項可實現根據其他記憶體分配器的請求擴大或縮小記憶體,不影響 SQL Server 動態記憶體管理。 使用“鎖定記憶體頁”使用者許可權時,建議按 如上所述,為 max server memory 設定一個上限 。
重要
應僅在必要時設定此選項,即有跡象表明正在換出 sqlservr 程式時。在這種情況下,錯誤日誌將報告錯誤 17890,類似於以下示例:
A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: #### seconds. Working set (KB): ####, committed (KB): ####, memory utilization: ##%.
從
SQL Server 2012 (11.x) 開始,Standard Edition 不需要
跟蹤標誌 845 來使用“鎖定頁”。
啟用“鎖定記憶體頁”
啟用“鎖定記憶體頁”選項:
-
在 “開始” 選單上,單擊 “執行” 。 在“開啟” 框中,鍵入 gpedit.msc
將開啟 “組策略” 對話方塊。
-
在 “組策略” 控制檯上,展開 “計算機配置” ,再展開 “Windows 設定” 。
-
展開 “安全設定” ,再展開 “本地策略” 。
-
選擇 “使用者權利指派” 資料夾。
細節窗格中隨即顯示出策略。
-
在該窗格中,雙擊“鎖定記憶體頁” 。
-
在“本地安全策略設定”對話方塊中,新增有權執行 sqlservr.exe ( SQL Server 啟動帳戶)的帳戶 。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25583515/viewspace-2664784/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 虛擬記憶體有什麼用 虛擬記憶體不足怎麼解決記憶體
- 電腦記憶體不足怎麼辦? 虛擬記憶體不足的解決辦法記憶體
- SQL Server出現虛擬記憶體不足的解決方法SQLServer記憶體
- windows下提示虛擬記憶體不足如何解決?Windows記憶體
- 實體記憶體和虛擬記憶體記憶體
- win8虛擬記憶體不足怎麼設定?記憶體
- 虛擬記憶體筆記記憶體筆記
- 虛擬記憶體到實體記憶體(32位)記憶體
- 【Java基礎】實體記憶體&虛擬記憶體Java記憶體
- 虛擬記憶體系統——瞭解記憶體的工作原理記憶體
- vertica記憶體不足的解決方案記憶體
- mongodb記憶體不足怎麼解決?MongoDB記憶體
- Java虛擬機器01——Java記憶體資料區域和記憶體溢位異常Java虛擬機記憶體溢位
- 深入理解Java虛擬機器-Java記憶體區域與記憶體溢位異常Java虛擬機記憶體溢位
- 聊聊虛擬記憶體記憶體
- Sql Server實體記憶體及虛擬記憶體設定的總結SQLServer記憶體
- win10虛擬記憶體怎麼設定 win10虛擬記憶體設定方法Win10記憶體
- 怎麼設定虛擬記憶體win10 win10虛擬記憶體如何設定記憶體Win10
- Win10設定虛擬記憶體方法 Win10怎麼設定虛擬記憶體Win10記憶體
- win10虛擬記憶體怎麼設定 win10虛擬記憶體設定步驟詳解Win10記憶體
- windows系統提示虛擬記憶體不足的原因Windows記憶體
- 提示“虛擬記憶體”不足的怎麼辦(轉)記憶體
- 虛擬記憶體,實體記憶體,頁面檔案,還有工作管理員記憶體
- 資源供給:記憶體和虛擬記憶體記憶體
- win10 8g記憶體虛擬記憶體設定多少合適_win10 8g記憶體怎麼分配虛擬記憶體Win10記憶體
- win10記憶體不足怎麼解決_win10記憶體不足怎麼辦Win10記憶體
- 解決ORACLE共享記憶體不足的方法Oracle記憶體
- 記憶體_大頁記憶體記憶體
- Win8關閉遊戲時提示虛擬記憶體不足的解決方法遊戲記憶體
- 關於虛擬機器記憶體和JVM記憶體設定的思考虛擬機記憶體JVM
- JAVA記憶體區域與記憶體溢位異常Java記憶體溢位
- 記憶體管理兩部曲之虛擬記憶體管理記憶體
- Linux 虛擬記憶體Linux記憶體
- 5.虛擬記憶體記憶體
- win10虛擬記憶體怎麼設定最好 win10虛擬記憶體設定多少好Win10記憶體
- win10 虛擬記憶體怎麼設定好 win10 虛擬記憶體設定方法Win10記憶體
- jvm記憶體設定及記憶體溢位、解決方案JVM記憶體溢位
- 設定SQLserver執行記憶體SQLServer記憶體