溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SQLServer因為OS虛擬內(nèi)存不足而hang住異常解決-鎖定內(nèi)存頁 (LPIM)

發(fā)布時間:2020-08-13 12:30:03 來源:ITPUB博客 閱讀:189 作者:guocun09 欄目:關(guān)系型數(shù)據(jù)庫

異常:

DB: SQL Server2012SP3

OS: Windows2012

一線工程師反應(yīng)系統(tǒng)訪問DB突然卡住了,DBA登錄DB檢查SQLServer發(fā)現(xiàn)DB無法登錄,之前SMSS已經(jīng)連接的session中無法執(zhí)行任何SQL。服務(wù)器CPU使用10%,memory使用達(dá)到了99%以上。過了十分鐘系統(tǒng)memory自己降低到了90%以下,DB可以訪問。

分析:

檢查SQLServer error log:

只是在一異常時間段有stack dump的記錄,但沒有太多有價值的信息 SQLServer因為OS虛擬內(nèi)存不足而hang住異常解決-鎖定內(nèi)存頁 (LPIM)

檢查windows性能計數(shù)器:

異常時間段OS memory確實耗盡 SQLServer因為OS虛擬內(nèi)存不足而hang住異常解決-鎖定內(nèi)存頁 (LPIM)

檢查windows log:

有虛擬內(nèi)存不夠警告,

sqlserver.exe進(jìn)程使用28GB(DBA設(shè)定的DB最大內(nèi)存使用量),dllhost.exe進(jìn)程使用12GB

正好把服務(wù)器的32GB+虛擬內(nèi)存設(shè)定的8GB占滿!所以報錯內(nèi)存不足!! SQLServer因為OS虛擬內(nèi)存不足而hang住異常解決-鎖定內(nèi)存頁 (LPIM)


解決:

上述dllhost.exe進(jìn)程使用12GB一定存在問題,此塊可能系統(tǒng)層面補(bǔ)丁或病毒相關(guān),已交給系統(tǒng)工程師分析。

但是否有辦法在OS內(nèi)存不足時,DBA通過設(shè)定可以不影響到SQL server的正常運行呢?

答案是有的,軟微官方提供鎖定內(nèi)存頁 (LPIM) 解決方法,通過Windows 策略將確定哪些帳戶可以使用進(jìn)程將數(shù)據(jù)保留在物理內(nèi)存中,從而阻止系統(tǒng)將數(shù)據(jù)分頁到磁盤的虛擬內(nèi)存中。這樣即使OS內(nèi)存不足時對SQL server的影響也會是最小了。

設(shè)定:

cmd->gpedit.msc->local computer policy->computer configuration->windows settings->security settings->local policies->user rights assignment-> Lock pages memory中加入添加 SQL Server 啟動帳戶 SQLServer因為OS虛擬內(nèi)存不足而hang住異常解決-鎖定內(nèi)存頁 (LPIM)

至此,鎖定內(nèi)存頁 (LPIM)設(shè)置完成。

再持續(xù)觀察一段時間,系統(tǒng)再沒有發(fā)生系統(tǒng)內(nèi)存不足SQLServer hang住問題。

------------------------------------------------------------ ------------------------------------------

以下附,軟微官方文檔說明:

https://docs.microsoft.com/zh-cn/sql/database-engine/configure-windows/server-memory-server-configuration-options?view=sql-server-ver15

鎖定內(nèi)存頁 (LPIM)

此 Windows 策略將確定哪些帳戶可以使用進(jìn)程將數(shù)據(jù)保留在物理內(nèi)存中,從而阻止系統(tǒng)將數(shù)據(jù)分頁到磁盤的虛擬內(nèi)存中。 鎖定內(nèi)存中的頁可以在發(fā)生將內(nèi)存分頁到磁盤時保持服務(wù)器的響應(yīng)能力。 已向有權(quán)運行 sqlservr.exe 的帳戶授予 Windows 鎖定內(nèi)存頁 (LPIM) 用戶權(quán)限時,在 SQL Server Standard Edition 和更高版本的實例中將“鎖定內(nèi)存頁”  選項設(shè)置為“打開”  。

若要對 SQL Server 禁用“鎖定內(nèi)存頁”選項,請為有權(quán)運行 sqlservr.exe( SQL Server 啟動帳戶)啟動帳戶的帳戶刪除“鎖定內(nèi)存頁”用戶權(quán)限  。

設(shè)置此選項可實現(xiàn)根據(jù)其他內(nèi)存分配器的請求擴(kuò)大或縮小內(nèi)存,不影響 SQL Server 動態(tài)內(nèi)存管理。 使用“鎖定內(nèi)存頁”用戶權(quán)限時,建議按 如上所述,為 max server memory 設(shè)置一個上限   。

重要

應(yīng)僅在必要時設(shè)置此選項,即有跡象表明正在換出 sqlservr 進(jìn)程時。在這種情況下,錯誤日志將報告錯誤 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 不需要 跟蹤標(biāo)志 845 來使用“鎖定頁”。

啟用“鎖定內(nèi)存頁”

啟用“鎖定內(nèi)存頁”選項:

  1. “開始” 菜單上,單擊 “運行” 。 在“打開”  框中,鍵入 gpedit.msc

    將打開 “組策略” 對話框。

  2. “組策略” 控制臺上,展開 “計算機(jī)配置” ,再展開 “Windows 設(shè)置”

  3. 展開 “安全設(shè)置” ,再展開 “本地策略”

  4. 選擇 “用戶權(quán)利指派” 文件夾。

    細(xì)節(jié)窗格中隨即顯示出策略。

  5. 在該窗格中,雙擊“鎖定內(nèi)存頁”  。

  6. 在“本地安全策略設(shè)置”對話框中,添加有權(quán)運行 sqlservr.exe ( SQL Server 啟動帳戶)的帳戶  。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI