Sql-Server

未知,AppDomain 66 (master.sysruntime_r你n噸一世米和runtime.65) 因記憶體壓力而被標記為解除安裝

  • September 3, 2019

我偶爾會在 SQL 錯誤日誌中註意到這個錯誤:

spid20s,未知,AppDomain 79 (master.sys

$$ runtime $$.78)由於記憶體壓力而被標記為解除安裝。

我正在使用 SQL Server 2016,SP1 CU5(我正在推動修補,但該公司反對)。

我讀過的所有內容都指向非 CLR 特定的記憶體壓力。有關於更改MemToLeave啟動參數中的設置的建議。對於較新版本的 SQL Server 仍然是這種情況,還是有其他建議?

SQL Server 2012 中更改了記憶體架構,因此幾乎無需再擔心MemToLeave設置,尤其是在使用 64 位 SQL Server 時。而且,從 SQL Server 2016(您正在使用)開始,SQL Server 僅提供 64 位版本(請參閱“數據庫引擎中的新增功能 - SQL Server 2016 ”頁面頂部的“註釋” )。所以,不,不用擔心MemToLeave

正確,“記憶體壓力”錯誤並非特定於 SQLCLR。這些錯誤並沒有告訴您記憶體壓力的原因,而是告訴您記憶體壓力會影響什麼(我懷疑是否有任何可能的方法可以真正了解原因 - 我的意思是,如果有 10 個程序佔用記憶體,哪個組合才是真正的原因?不一定是佔用最大塊的原因,因為這可能是完全有效的)。記憶體壓力也會影響其他可能不會出現在錯誤日誌中的區域,例如刷新計劃記憶體和/或緩衝池(即載入到記憶體中的數據頁)。

有幾個使用 SQLCLR 的內置功能,部分列表如下:

  • 數據類型:

    • 層次 ID
    • 地理
    • 幾何學
  • 職能:

    • FORMAT
    • PARSE
    • TRY_PARSE
    • AT TIME ZONE(從 SQL Server 2016 開始)
    • COMPRESS(但不是UNCOMPRESS;從 SQL Server 2016 開始)
  • 特徵:

    • 變更數據擷取
    • 動態管理框架
    • 複製
    • 基於策略的管理
    • 主數據服務
    • SSISDB(“模糊查找”功能)

其中一項或多項(或者可能是我在上面未列出的一項)是您系統中受到影響的內容。有兩條線索,都在該(master.sys[runtime].78)資訊的一部分中,告訴我們這一點:

  1. 數據庫是master(假設您永遠不會將自定義程序集載入到master;-))
  2. 程序集的“所有者”(即AUTHORIZATION)是sys(我們不能將程序集的所有權分配給任何一個sysINFORMATION_SCHEMA因為這些主體都沒有SID)。如果要查看每個程序集的所有者,請執行以下操作:
SELECT asm.[name] AS [Assembly],
      USER_NAME(asm.[principal_id]) AS [Owner],
      USER_SID(asm.[principal_id]) AS [OwnerSID]
FROM   sys.assemblies asm;

你可以做的是:

  1. 您提到此錯誤“偶爾”出現,但並未準確定義此錯誤的頻率。每小時一次不同於每天一次,每天一次不同於每週一次。記憶體壓力會發生,所以除非每天超過幾次,否則我不會花太多時間擔心它。
  2. 添加更多記憶體(物理上和/或允許 SQL Server 使用更多的系統記憶體,如果您目前將 SQL Server 限制在較少的數量)
  3. 分析在 SQL Server 之外消耗記憶體的內容,以查看伺服器上是否有可以解除安裝到其他伺服器的不必要程序,或者可能完全關閉(即是否正在使用其他服務和/或遠端桌面會話)然後執行使用大量記憶體的 SSMS 等?)

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