在SQL Server的配置中,尤其是那些應用服務器和資料庫服務器共用/混用的情況下,最好啟用“鎖定記憶體頁”選項,反而對于單獨的SQL Server資料庫服務器,這個選項反而不是必須的,最近就遇到過這樣一個案例,一個專案的SQL Server資料庫和IIS應用等都部署在同一臺服務器上,當時,Zabbix監控已經出現CPU告警、以及Swap Usage告警....

登錄服務器,檢查后發現IIS Worker Process行程占用了大量的CPU資源,消耗占用了12.5GB記憶體(服務器總共16G記憶體),由于IIS記憶體泄露,而SQL Server沒有啟用”鎖定記憶體頁“選項,即使設定了Maximum server memory,也導致SQL Server的記憶體被不斷擠占,系統將SQL Servre行程用到的資料置換到虛擬記憶體中去,如下截圖所示,最終導致SQL Server性能嚴重下降,甚至無法連接情況出現,

查看SQL Server的日志資訊,你會看到大量這樣的錯誤資訊:
A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: 1846 seconds. Working set (KB): 1457444, committed (KB): 10213768, memory utilization: xx%

如果SQL Server啟用了“鎖定記憶體頁”選項的話,就不會出現這種情況,不會由于記憶體換出(page out)出現性能和連接問題,下面簡單介紹一下SQL Server服務器”鎖定記憶體頁“的簡單知識,下面內容節選自官方檔案,官方檔案中的一部分內容,中文翻譯那是相當的糟糕,個人對晦澀難懂或翻譯不當的地方有所糾正,所以下面內容與官方檔案略有差異,敬請知曉,
SQL Server啟用“鎖定記憶體頁”選項
適用于:
SQL Server(所有支持的版本)
此 Windows 策略將確定哪些帳戶的行程可以將資料保留在物理記憶體中,從而阻止系統將記憶體中資料換出記憶體(page out)到磁盤的虛擬記憶體中,
備注
當預計會將記憶體中頁換出(page out)到磁盤時,鎖定記憶體中的頁可以大大提高性能,
使用 Windows 組策略工具 (gpedit.msc),可以為 SQL Server的啟動帳戶啟用此策略,必須是系統管理員才能更改此策略,
啟用“鎖定記憶體頁”選項
1.在“開始”選單上,單擊“運行”, 在“打開” 框中,鍵入gpedit.msc
2.在“本地組策略編輯器” 控制臺上,展開 “計算機配置” ,再展開 “Windows 設定” ,
3.展開“安全設定”,再展開 “本地策略” ,
4.選擇 “用戶權利指派” 檔案夾,
細節窗格中隨即顯示出策略,
5.在該窗格中,雙擊“鎖定記憶體頁”,
6.在“本地安全設定 - 鎖定記憶體中的頁”對話框中,單擊“添加用戶或組” ,
7.在“選擇用戶”、“服務帳戶”或“組”對話框中,選擇勾選運行sqlservr.exe (SQL Server 啟動帳戶)的帳戶,
8.重啟 SQL Server 服務,以使此設定生效,
鎖定記憶體頁 (LPIM)
此Windows策略將確定哪些帳戶的行程可以將其使用的資料保留在物理記憶體中,從而阻止系統將記憶體中的頁面換出記憶體(page out)到磁盤的虛擬記憶體中, 將記憶體中頁換出記憶體到磁盤時,鎖定記憶體中的頁可以可使服務器保持回應, 向運行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 來使用“鎖定頁”,
參考資料:
https://docs.microsoft.com/zh-cn/sql/database-engine/configure-windows/enable-the-lock-pages-in-memory-option-windows?view=sql-server-ver15
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/288994.html
標籤:SQL Server
