SQL Server 2012 消耗記憶體非常慢
我有一個難題。我最近將一個 ~20gb 的數據庫
Window Server 2008 R2 || SQL Server 2008 R2
從Window Server 2012 || SQL Server 2012
. 以前的伺服器有 32gb 的記憶體,在啟動時,Max Server 的 28gb 記憶體將在一天內消耗掉。新伺服器有 48gb 記憶體,但是在啟動數據庫時
- 不佔用4gb的最小記憶體
- 執行一周後只消耗了 7gb 的數據
數據庫主要是不使用儲存過程的臨時工作負載。因此,添加更多查詢計劃的記憶體的希望將保持記憶體。
知道是什麼原因造成的嗎?
編輯
dm_os_bufferpool_descriptors:
我的第一個問題是你在哪裡尋找 SQL Server 記憶體消耗。請不要使用任務管理器或程序監視器,當 SQL Server 服務帳戶具有 Locked pages in memory 權限時,這些不會顯示正確的值。只需使用以下查詢即可查看 SQL Server 消耗的記憶體
select (physical_memory_in_use_kb/1024)Memory_usedby_Sqlserver_MB, (locked_page_allocations_kb/1024 )Locked_pages_used_Sqlserver_MB, (total_virtual_address_space_kb/1024 )Total_VAS_in_MB, process_physical_memory_low, process_virtual_memory_low from sys. dm_os_process_memory
SQL Server 2012 中的 SQL Server 記憶體程式碼發生了顯著變化,但與您所看到的內容無關。SQL Server 記憶體分配本質上是動態的,當 SQL Server 啟動時,它會增加記憶體通知,直到
highMemoryResourceNotification
資源通知被撤銷。只要有可用記憶體,即只要發出通知,SQL Server 就會根據其需要繼續分配MEMPHYSICAL_HIGH (HighMemoryResourceNotification )
記憶體在寡婦中,當MEMPHYSICAL_LOW (LowMemoryResourceNotification)
在 Windows中發出信號時,將縮減其使用量。當可用記憶體介於低記憶體和高記憶體之間時,SQL Server 將嘗試保持記憶體使用穩定( RESOURCE_MEM_STEADY)
,但有一些例外。使用 48G 記憶體,您將最大伺服器記憶體設置為 44G,並且只為作業系統提供 4G。IMO 這是不正確的,您必須至少提供 6 G OS。您應該為作業系統提供足夠的記憶體,以便它有足夠的空間進行分配,否則它將開始發出低記憶體通知,並且 SQL Server 將不得不削減其記憶體消耗。
SQL Server 服務帳戶是否具有Locked pages in memory 特權。如果不是,你應該給它,但在這樣做之前,請為作業系統留出 6-7 G(我在這裡假設這是 SQL Server 的專用系統)
如果您希望 SQL Server 消耗更多記憶體,請創建一個虛擬表,然後開始在其中插入大量記錄,同時開始執行多個
Select *
語句,您會看到 SQL Server 記憶體消耗上升。如果要檢查 SQL Server 消耗的 SQL Server 記憶體,請使用上面發布的查詢
首先查看http://msdn.microsoft.com/en-us/library/ms178067.aspx中詳細介紹的最小伺服器記憶體和最大伺服器記憶體配置選項。
您可以通過執行將它們拉起:
exec sp_configure 'min server memory' exec sp_configure 'max server memory'
最終,您必須決定性能是否受到這些設置的影響。