Sql-Server

SQL Server 中的記憶體壓力 - 是否啟用 LPIM?

  • November 5, 2018

我的 SQL Server 2016 中的查詢執行速度很慢。

伺服器配置:

  1. 總物理記憶體:128 GB
  2. SQL 伺服器最大記憶體:102 GB
  3. 事務複製已啟用。
  4. 數據庫大小:1.6 TB
  5. Microsoft SQL Server 2016 (SP2) (KB4052908) - 13.0.5026.0 (X64) Mar 18 2018 09:11:49 版權所有 (c) Microsoft Corporation Standard Edition (64-bit) o​​n Windows Server 2016 Standard 10.0 (Build 14393: )

我執行ring buffer查詢以檢查物理記憶體是否不足。我檢查環形緩衝區的記憶體壓力的原因是因為我的計劃記憶體也經常被清除,即使沒有人執行任何腳本來清除記憶體。我得到以下結果,我看到 HIGH 和 LOW 具有相同的值Avail Phys Mem.KB

我學到的一件事是所有RESOURCE_MEMPHYSICAL_LOW指標程序都是 2,這意味著記憶體問題出在分配給 SQL Server 的記憶體中,而不是用於作業系統和其他應用程序的剩餘記憶體。供參考。這是一個 SQL Server 專用伺服器。

在此處輸入圖像描述

我還檢查了性能監視器,Avaialable MBytes它顯示了值 16,662.00 (16 GB),如下所示。

我認為 16 GB 對於作業系統 + 其他應用程序來說足夠了,這是一個 SQL 伺服器專用伺服器。

在此處輸入圖像描述

還檢查了伺服器診斷。它說有 25 GB 可用。

在此處輸入圖像描述

所以現在我很困惑是否:

  1. 這個伺服器有記憶體壓力嗎?
  2. RESOURCE_MEMPHYSICAL_LOW標誌是由作業系統或外部程序還是 SQL Server 設置的?
  3. 我應該啟用 LPIM 來解決這個問題嗎?

根據@Shanky’s answer的其他詳細資訊。

  1. 我啟用了查詢儲存,但我在一周前禁用了它。
  2. 帶有時鐘指針的 SQL Server 計劃的 rounds_countHAND_EXTERNAL正在增加。

更多細節。

  • 我正面臨一些查詢的巨大記憶體授予,這導致 RESOURCE_SEMAPHORE 等待其他查詢。

這個巨大的記憶體授權(我檢查的一個查詢,記憶體授權約為 7GB)是否會導致來自 SQL 伺服器的記憶體壓力,這是否可能是計劃記憶體清除和RESOURCE_MEMPHYSICAL_LOW標記的原因。

此伺服器是否存在記憶體壓力。

由於資訊有限,我無法確定。需要更多參數和 perfmon 的輸出來說明記憶體壓力。但是,是的,從您發布的查詢輸出來看2018-10-23 11:22:30:457,某些程序確實記憶體不足,而不是整個 SQL Server 系統。

RESOURCE_MEMPHYSICAL_LOW 標誌是由作業系統或外部程序或 SQL 伺服器設置的。?

看看它說的輸出RESOURCE_MEMPHYSICAL_LOW值,2IndicatorProcess意味著某些正在執行的程序確實面臨記憶體壓力,如果IndicatorSystem值是 2,那將是系統範圍的記憶體壓力。另請注意,記憶體壓力來自低物理(RAM)而不是低虛擬記憶體(VAS)。所以你可以看到只取一個時間的值很難說有持續的記憶體壓力。我建議您閱讀Using sys.dm_os_ring_buffers To Diagnose Memory Issues in SQL Server以了解 Indicatorsystem 和 IndicatorProcess 值的含義

我應該啟用 LPIM 來解決這個問題嗎?

LPIM不會解決問題,它只會掩蓋問題並作為解決方法出現。您需要找到導致資源監視器標記記憶體不足通知的原因,可能是某些正在執行的程序導致它。現在計劃記憶體經常被清除是很多人從 SQL Server 2016 開始報告的事情,這可能是由於查詢儲存,你在使用一個嗎?查詢儲存曾經是計劃記憶體清除的罪魁禍首,但由於您使用的是最新的 SP,我懷疑這個因素。

為了查看記憶體的記憶體壓力,我們還可以使用 DMV sys.dm_os_memory_cache_clock_hands

SELECT  *
FROM sys.dm_os_memory_cache_clock_hands
WHERE rounds_count > 0

如果rounds_count增加,這意味著有壓力迫使時鐘頻繁地掃描記憶體並刪除條目。

編輯:

我正面臨一些查詢的巨大記憶體授權,這導致 RESOURCE_SEMAPHORE 等待其他查詢。這個巨大的記憶體授權(我檢查的一個查詢,記憶體授權約為 7GB)是否會導致來自 SQL 伺服器的記憶體壓力,這可能是原因嗎計劃記憶體清除和 RESOURCE_MEMPHYSICAL_LOW 標誌。

是的,很可能,我已經看到你為這個問題提出了特定的執行緒,我只會在你做任何事情之前補充一點,確保你更新了統計數據並整理了索引。過時的統計數據可能會導致糟糕的計劃,最終可能會要求更多的記憶體,從而導致信號量等待。

以下是討論類似問題的執行緒列表

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