SQL Server 實例僅使用幾百 MB。遠低於最低伺服器記憶體設置
我有兩個 SQL Server 2012 實例在具有 32GB RAM 的伺服器上執行並且幾乎沒有其他執行。
一個實例表現正常。它的工作集記憶體執行接近其送出,這也接近 SQL Server 中的最大伺服器記憶體設置。
另一個實例(在圖像中突出顯示)的行為與我預期的不同。無論我如何配置它的最小和最大記憶體設置,我都無法獲得超過幾百 MB 的工作集記憶體,即使伺服器上有足夠的可用 RAM。
這對其性能具有非常不利的影響,尤其是在重負載下。數據庫使用得很好,當這個實例正常工作時*它會很快填滿最大伺服器記憶體設置 20GB。
伺服器已重新啟動。實例已重新啟動。我嘗試更改為各種最小/最大設置並停止執行正常的實例 - 只是為了檢查它是否不會以某種方式乾擾。問題仍然存在,雖然一個實例似乎對最小和最大記憶體設置做出了正常響應,而另一個則沒有。
*我不知道發生了什麼變化,否則我會把它改回來。
- 作業系統和 SQL Server 都是 64 位的。
- sys.configurations的內容在兩個實例上是相同的。
- “低”伺服器上的數據庫總數為 10 GB。
- 我有信心在伺服器上放置了足夠的負載,它應該使用更多的記憶體。在過去,它過去常常很快地填滿它的記憶體分配。
- 我已經對應該將數據拉入記憶體的表進行了一些大型查詢。
- 這是一個專門的數據庫伺服器,它上面沒有執行其他任何東西,並且自從這個問題開始以來它的執行速度明顯變慢。
- sys.dm_os_sys_memory和perfmon與資源監視器一致。
- 目標伺服器記憶體 (KB) = 10240008;伺服器總記憶體 (KB) = 5237744
任務管理器或資源監視器中的記憶體計數器不是確定 SQL Server 記憶體使用情況的好方法。如果 SQL Server 正在使用鎖定頁面,則這些頁面不會顯示在工作集或專用字節中。
有很多方法可以確定 SQL Server 是否正在使用鎖定頁面。您可以在錯誤日誌中查找類似以下的消息:
Using locked pages in the memory manager
或者,檢查
sys.dm_os_process_memory
DMVlocked_page_allocations_kb
列。例如,在使用鎖定頁面的本地測試實例上,我看到:而資源監視器顯示:
sys.dm_os_sys_memory
請注意,這與您在問題評論中提到的 DMV 不同。DMV 中還有各種其他有用的記憶體使用資訊,包括高或低虛擬或物理記憶體指示。這些都在聯機叢書中進行了描述。
好像最近有人將 授予了
SeLockMemoryPrivilege
SQL Server 啟動帳戶,或者該帳戶已更改為LocalSystem
,預設情況下具有此權限。一般來說,在記憶體中鎖定頁面是一件好事。