sql server不吃內存,sql server不占用內存導致磁盤壓力暴增


【1】問題發現

【1.1】sql server服務器磁盤隊列暴增報警

告警項: 磁盤隊列阻塞 
項目組:XXX
實例名:XXX_WIN_9182
詳情: D: 盤隊列3m中內持續等待隊列大於10 VALUE = 86 
級別: warning 
開始時間: 2021-02-19 08:23:50
++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++

 

然后查看監控面板,如下圖:

  

 

發現,磁盤IO,磁盤讀寫 太大,且總內存16G,只用了 4.8G 左右

  

 

 

【1.2】分析

為什么會出現這種情況?

  磁盤IO,磁盤讀寫 太大,且總內存16G,只用了 4.8G 左右

sql server改本性了?開始不狂吃內存,反而害羞的像個小姑娘,不怎么占用內存了?

這就和戀愛中的小姑娘一樣,既害怕對方亂來,更害怕對方不來

 

(1)查看一下最大內存設置,並沒有問題

  

 

(2)查看當前sql server 內存占用使用,發現只申請了3G,且最優只能申請3G

select *,cntr_value/1.0/1024/1024 as Mem_GB from sys.dm_os_performance_counters where counter_name like '%memory%'
and rtrim(ltrim(counter_name)) in ('Target Server Memory (KB)','Total Server Memory (KB)')

  

 

為什么那么多內存不用,只用了3G多呢?

(3)最終發現,是因為sql server 是32位的

《1》select @@version

=》

  Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)   Oct 14 2005 00:33:37   Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Edition on Windows NT 6.1 (Build 7601: Service Pack 1) 

《2》exec xp_msver

  

 

 誰裝的,坑!

(4)我們看看sql server是什么時候裝的

select * from sys.server_principals

2年前裝的,如下圖:

  

 

 

【2】解決問題

【2.1】開啟 AWE,配置最大內存

(1)t-sql實現

sp_configure 'show advanced options', 1  --開啟高級選項
RECONFIGURE
GO

sp_configure 'awe enabled', 1  --開啟 awe 功能
RECONFIGURE
GO

sp_configure 'min server memory', 2000--設置MSSQL服務占用最小內存為2GB
RECONFIGURE
GO

sp_configure 'max server memory', 11000 --設置MSSQL服務占用最大內存為11GB
RECONFIGURE
GO

(2)ssms實現

右擊實例=》屬性,具體如下圖:

  

 

 

【2.2】給MSSQL 引擎服務器賬戶添加=》鎖定內存頁

參考官網:https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2012/ms190730(v=sql.110)

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

  2. 在**“本地組策略編輯器”控制台上,展開“計算機配置”,再展開“Windows 設置”**。

  3. 展開**“安全設置”,再展開“本地策略”**。

  4. 選擇**“用戶權利指派”**文件夾。

    細節窗格中隨即顯示出策略。

  5. 在該窗格中,雙擊**“鎖定內存中的頁”**。

  6. 在**“本地安全設置 – 鎖定內存中的頁”對話框中,單擊“添加用戶或組”**。

  7. 在**“選擇用戶、服務帳戶或組”**對話框中,添加有權運行 sqlservr.exe 的帳戶。

  8. 注銷后重新登錄,此更改才生效。

  

  

 

 然后我們需要用SSCM,或者在服務列表中,看一下sql server 引擎和代理賬戶是什么,然后好吧它加入到 運行鎖定內存頁中去

比如我這里是 localsystem

  

 

 

   

 

 

 

 

【2.3】配置好后,sql server服務必須重啟

  要是是固定賬戶:則注銷后重新登錄,此更改才生效。

  最好是重啟一下機器吧;

【2.4】AWE的設置在各個版本上的情況(參考)

在坊間流傳的有關AWE的設置的各種版本讓人非常困惑。比如說如何設置起作用,如何設置不起作用,在32位和64位上是否需要AWE等。

  • 在64位系統(sql SERVER 2005+版本)
    • AWE是不需要的(即使是ON狀態,也毫無影響)
    • 開啟“鎖定內存頁”使得緩沖池中的內存頁不會被置換到虛擬內存中(實際上所有的Single Page Allocator分配和Stolen的內存都不會被置換)
    • 當開啟“鎖定內存頁時”,sql Server使用Windows AWE API來分配內存,這種方式略快
    • “鎖定內存頁”僅僅在標准版和企業版中存在(譯者注:在非生產環境的開發版也是存在的)
  •     在32位系統(sql SERVER 2005+版本)
    • 為了使用大於4G的內存,必須開啟AWE來使用額外的虛擬地址空間
    • 為了使用AWE,“鎖定內存頁”權限必須開啟
    • “鎖定內存頁”僅僅在標准版和企業版中存在(譯者注:在非生產環境的開發版也是存在的)

 

【3】核驗

重啟后,再使用【1】中相關方法和代碼,核驗一下;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM