您好,登錄后才能下訂單哦!
異常:
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住問題。
------------------------------------------------------------ ------------------------------------------
以下附,軟微官方文檔說明:
https://docs.microsoft.com/zh-cn/sql/database-engine/configure-windows/server-memory-server-configuration-options?view=sql-server-ver15
此 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 啟動帳戶)的帳戶 。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。