Sql-Server

SQL Server 2012 消耗記憶體非常慢

  • May 17, 2015

我有一個難題。我最近將一個 ~20gb 的數據庫Window Server 2008 R2 || SQL Server 2008 R2Window Server 2012 || SQL Server 2012. 以前的伺服器有 32gb 的記憶體,在啟動時,Max Server 的 28gb 記憶體將在一天內消耗掉。新伺服器有 48gb 記憶體,但是在啟動數據庫時

  1. 不佔用4gb的最小記憶體
  2. 執行一周後只消耗了 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'

最終,您必須決定性能是否受到這些設置的影響。

引用自:https://dba.stackexchange.com/questions/82418