Sql-Server
未知,AppDomain 66 (master.sysruntime_r你n噸一世米和runtime.65) 因記憶體壓力而被標記為解除安裝
我偶爾會在 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)
資訊的一部分中,告訴我們這一點:
- 數據庫是
master
(假設您永遠不會將自定義程序集載入到master
;-))- 程序集的“所有者”(即
AUTHORIZATION
)是sys
(我們不能將程序集的所有權分配給任何一個sys
或INFORMATION_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;
你可以做的是:
- 您提到此錯誤“偶爾”出現,但並未準確定義此錯誤的頻率。每小時一次不同於每天一次,每天一次不同於每週一次。記憶體壓力會發生,所以除非每天超過幾次,否則我不會花太多時間擔心它。
- 添加更多記憶體(物理上和/或允許 SQL Server 使用更多的系統記憶體,如果您目前將 SQL Server 限制在較少的數量)
- 分析在 SQL Server 之外消耗記憶體的內容,以查看伺服器上是否有可以解除安裝到其他伺服器的不必要程序,或者可能完全關閉(即是否正在使用其他服務和/或遠端桌面會話)然後執行使用大量記憶體的 SSMS 等?)