Sql-Server

SQL Server: Memory Manager: Target Server Memory (KB)是否是基於最近工作負載或最大記憶體設置的理想記憶體量?

  • May 6, 2022

連結:https ://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/monitor-memory-usage?view=sql-server-ver15

SQL Server:記憶體管理器:目標伺服器記憶體 (KB) 此計數器指示 SQL Server 根據最近的工作負載可以消耗的理想記憶體量。在典型操作一段時間後與 Total Server Memory 進行比較,以確定 SQL Server 是否分配了所需的記憶體量。

我在網際網路上得到關於SQL Server: Memory Manager: Target Server Memory (KB)櫃檯的相互矛盾的定義。

MSDN 文件定義如上面的引用所示。正如其他線上連結所說,這是我們在 sql server 選項下配置的最大伺服器記憶體。

範例:https ://www.mssqltips.com/sqlservertip/6571/perfmon-counters-for-sql-server-memory/

目標伺服器記憶體 (KB) 是 SQL Server 在其目前工作負載下可能分配給緩衝池的記憶體量。目標記憶體 (KB) 計數器在設置時將反映 SQL Server“最大伺服器記憶體 (MB)”,因為這將是 SQL Server 可以並且希望達到的記憶體量。

哪個定義是正確的?

此答案假定係統未配置 LPIM 和啟動跟踪標誌 834 - 這樣的系統按其自己的規則執行,這些規則相當獨特。

如果

$$ Max Server Memory $$設置為 SQL Server 可以在系統上實現給定總 RAM 和其他記憶體承諾的值,$$ Target Server Memory $$將等於$$ Max Server Memory $$. 如果$$ Max Server Memory $$如果不導致來自作業系統的記憶體不足通知,則無法實現或維護,SQL Server 將選擇一個較低的可實現$$ Target Server Memory $$價值——有一些例外。 這張圖顯示了一個搖擺不定的

$$ Target Server Memory $$. 這是不穩定的,因為最高的$$ Target Server Memory $$值 - 小於或等於$$ Max Server Memory $$- 足夠高,有時系統上的其他記憶體使用會導致記憶體通知和調整不足。調整的規模相當小——降低$$ Max Server Memory $$到最低的$$ Target Server Memory $$減去 2GB 的值可能會使該系統具有穩定而不是搖擺不定$$ Target Server Memory $$. 不穩定的目標伺服器記憶體 只是讓你知道我不是在編造這個:-)這是分頁空間的用途,

$$ Available $$, 和$$ Free & Zero Page List $$記憶體看起來像那個系統,而$$ Target Server Memory $$搖搖晃晃。 不穩定目標期間的分頁空間

降低的一個例外

$$ Target Server Memory $$當它無法實現時,來自與 SSAS 和 SQL Server 的互動。SSAS 使用伺服器 RAM 的 20% 的預設最小工作集大小。在 SSAS 服務啟動後,此最小工作集會立即減少 ResAvail 頁面,即使目前工作集可能對$$ Available $$或者$$ Free & Zero Page List $$記憶。ResAvail 頁面的減少可能會限制 SQL Server$$ Total Server Memory $$這可以實現,但如果啟用 LPIM,它不會降低$$ Target Server Memory $$當記憶體條件阻止時,通常會預期$$ Max Server Memory $$從可實現。最終結果可以是一個系統,其中$$ Target Server Memory $$永遠不會降低。沒有低記憶體條件$$ Available $$或者$$ Free & Zeroed Page List Memory $$即使低 ResAvail Pages 阻止$$ Total Server Memory $$從到達$$ Target Server Memory $$. 在這種情況下,如果 SQL Server 實例中有足夠的活動,即使沒有使用分頁空間,也可能發生記憶體不足錯誤,根據$$ Available $$或者$$ Free & Zero Page List $$, 和$$ Total Server Memory $$尚未達到$$ Target Server Memory $$. 這是顯示這種情況的圖表。最初,工作負載活動導致

$$ Total Server Memory $$(這是 sqlos 空閒記憶體、數據庫記憶體和被盜記憶體的總和)向著增加$$ Target Server Memory $$,它保持不變$$ Max Server Memory $$自始至終。但$$ Total Server Memory $$達到上限,進一步的活動將不允許$$ Total Server Memory $$繼續向著成長$$ Target Server Memory $$. 在使用 perfmon 擷取該圖的數據後不久,該 SQL Server 實例中開始出現 OOM。 總達不到目標

這些部落格文章提供了有關 SQL Server 和 SSAS 之間這種不尋常互動的更多詳細資訊。我建議盡可能將這些服務彼此隔離。

如何在單個伺服器上執行超過 4 或 5 個 Analysis Services 表格實例 - 解決方案!- 部落格 (qumio.com)

由於 SQL Ser 導致作業系統掛起或記憶體不足…不用等待,它是 SQL 分析服務 (SSAS) - Microsoft 技術社區

另一種情況

$$ Target Server Memory $$可能保持穩定,即使低記憶體條件會預測減少$$ Target Server Memory $$: 什麼時候$$ Min Server Memory $$設置為非零數並且$$ Target Server Memory $$已經下降到$$ Min Server Memory $$,但記憶體不足的情況仍然存在。 讓我們像以前一樣假設系統不是(LPIM + T834)。此外,系統上沒有 SSAS,SQL Server 是系統上唯一的大記憶體消耗者。最後,

$$ Min Server Memory $$= 0(不受管制,預設值)。 SQL Server 啟動後立即

$$ Target Server Memory $$將被設置。如果 MSM 是可實現的,則該值將用作目標。否則將選擇較低的值作為目標。最初,$$ Total Server Memory $$會相當小。但工作量壓力會導致$$ Total Server Memory $$向著成長$$ Target Server Memory $$.$$ Target Server Memory $$只會在響應記憶體不足通知時降低。如果$$ Target Server Memory $$不等於MSM,記憶體不足的情況已經清除,SQL Server可以實現更高的$$ Target Server Memory $$值,將選擇更高的值作為目標(直到 MSM)。在任何時候$$ Total Server Memory $$不同於$$ Target Server Memory $$, 活動可能導致$$ Total Server Memory $$向著增加或減少$$ Target Server Memory $$. 最後要提到的一種行為:有時

$$ Total Server Memory $$可能超過$$ Target Server Memory $$即使使用 MSM 作為目標值。在我使用的系統上,當多個並發批處理模式查詢執行時,這種情況最常見且最激進 - 無論這些查詢是列儲存上的批處理模式還是行儲存上的批處理模式。 所以在例子中

$$ Max Server Memory $$= 92000 mb 和$$ Target Server Memory $$= 90000 mb,關於系統上的記憶體狀態我能說什麼?好吧,SQL Server 無法實現 92000 mb 的目標。因此選擇了 90000 mb 的較低目標。當我調整系統時,我個人喜歡確保 MSM 是這樣的值$$ Target Server Memory $$= MSM - 很少變低。

回答你的問題

SQL Server: Memory Manager: Target Server Memory (KB)理想的記憶體量是基於最近的工作負載還是最大記憶體設置?

目標伺服器記憶體是“伺服器願意消耗的理想記憶體量(可以受“最大伺服器記憶體”設置限制)”

如果設置了 Max Server Memory,則 Target Server Memory = Max Server Memory

ps 執行一個程序MemoryManagerInfo,它在我的伺服器上顯示的內容如下:

記憶體管理器資訊

目標伺服器記憶體 = 184320 MB,它對應於我在伺服器設置中的最大伺服器記憶體中的內容

伺服器記憶體選項

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