資源監視器會在執行 SQL Server 的伺服器上進入非產生條件

本文提供有關非產生資源監視器的詳細資訊。

原始產品版本: SQL S
原始 KB 編號: 2216485

徵狀

在執行 Microsoft SQL Server 2008 或更新版本的伺服器上,資源監視器工作每隔 5 秒會記錄下列訊息:

Date_And_Time Server Using 'dbghelp.dll' version '4.0.5'
Date_And_TimeServer **Dump thread - spid = 0, PSS = 0x0000000000000
000, EC = 0x0000000000000000
Date_And_TimeLogon Login succeeded for user 'OPENTEXT\sqlcrmusr'. Connection: trusted. [CLIENT:
IP_Address]
Date_And_Timespid78 Error: 4014, Severity: 20, State: 2.
Date_And_Timespid78 A fatal error occurred while reading the input stream from the network. The session will be terminated.
Date_And_TimeServer ***Stack Dump being sent to Drive:\MSSQL2005\LOG\SQLDump####.txt
Date_And_TimeServer * *******************************************************************************
Date_And_TimeServer *
Date_And_TimeServer * BEGIN STACK DUMP:
Date_And_TimeServer *
Date_And_Timespid 0
Date_And_TimeServer *
Date_And_TimeServer * Non-yielding Resource Monitor
Date_And_TimeServer *
Date_And_TimeServer * *******************************************************************************
Date_And_TimeServer * -------------------------------------------------------------------------------
Date_And_TimeServer * Short Stack Dump
Date_And_TimeServer Stack Signature for the dump is 0x000000000000005C
Date_And_Time,Server,Unknown,Resource Monitor (0x9b0) Worker 0x0000000003A2C1C0 appears to be non-yielding on
Node_#. Memory freed: 0 KB. Approx CPU Used: kernel 0 msnull user 0 msnull Interval:
Interval_value.

原因

資源監視器工作會定期喚醒,以接聽歸類為低、高或穩定的記憶體事件。 監視器會在這些事件發生時通知事件訂閱者。

這些記憶體事件可能是 SQL Server的外部事件。 外部事件包括來自操作系統的通知,且為全系統。 其他事件是 SQL Server的內部事件。 內部事件包括來自緩衝池的通知,且為整個進程。 收到這類通知時,各種記憶體取用者會修剪其記憶體使用量。

注意事項

取用者可以是快取存放區、使用者存放區或物件存放區的記憶體 Clerk。

如果某些記憶體取用者使用大量的記憶體,取用者執行的修剪可能需要很長的時間來準備。

排程器監視工作每隔 5 秒執行一次。 排程監視器會檢查資源監視器在過去60秒內是否已從一個取用者移至另一個取用者。 當排程器監視器偵測到資源監視器超過取用者 60 秒時,排程監視器會將此案例解譯為資源監視器進入未產生狀態。 此解譯會導致排程監視器記錄徵兆一節中所提及的錯誤訊息。

注意事項

從 2019 SQL Server 開始,60 秒間隔會增加到 120 秒。 增加會減少這些診斷通知的頻率。 它可減少記憶體轉儲檔案的產生。

如果資源監視器每 5 秒釋放記憶體的速率小於 2 MB,也會引發這些訊息。

這些訊息只是表示資源監視器正在忙著清除大型取用者。 這些訊息不一定表示資源監視器本身有問題。

解決方案

從下列 Service Pack 開始,不產生的資源監視器訊息會延伸,以輕鬆隔離導致非收益條件的記憶體 Clerk:

  • Microsoft SQL Server 2008 Service Pack 2
  • Microsoft SQL Server 2008 R2 Service Pack 1

新訊息將類似下列範例:

Resource Monitor (0x9b0) Worker 0x0000000003A2C1C0 appears to be non-yielding on Node Node_#. Memory freed: 0 KB. Last wait: > lastwaittype. Last clerk: type clerk_type, name clerk_name. Approx CPU Used: kernel 0 ms, user 0 ms, Interval: Interval_value.

以下是此訊息中所使用之各種欄位的描述:

  • 釋放的記憶體: 此欄位是資源監視器針對指定間隔釋放的記憶體數量。 其測量單位為 KB。 如果釋放記憶體的速率未每隔 5 秒超過 2 MB,排程器監視器會將此狀況偵測為未產生的情況。

  • 上次等候: 此欄位是資源監視器線程的最後一個等候類型。 您可以將此欄位與 Approx CPU Used 欄位結合使用。 此字段組合可以識別資源監視器線程是否正在執行,或是正在等候間隔的重要部分。

  • 最後一個 Clerk: 此欄位是發生非產生條件時,正在修剪其記憶體的記憶體 Clerk 類型和名稱。

  • 已使用近似 CPU: 此欄位是資源監視器所使用的核心和用戶時間,以毫秒為單位。 您可以將此欄位與其他字段搭配使用,以確認資源監視器在指定的間隔期間正在進行進度。

  • 區間: 此欄位是自從最後一個 Clerk 收到通知後經過的時間,以毫秒為單位來測量。

您可以使用此訊息來識別低記憶體通知的來源。 您也可以使用訊息時間的RING_BUFFER_RESOURCE_MONITOR專案。

資源

如需如何解譯RING_BUFFER_RESOURCE監視器的詳細資訊,請參閱下列techcommunity部落格文章:

資源監視器工作可以針對 SQL Server 中的記憶體相關效能問題進行疑難解答。 SQL Server 會接聽並回應記憶體通知。 如需這些項目的詳細資訊,請參閱下列 MSDN 部落格文章: