在 SQL Azure DB 上遇到 CLR 錯誤
我們突然開始看到此錯誤,並且在呼叫數據庫或彈性池中的任何其他數據庫時似乎相當頻繁地發生。DTU 沒有被最大化,資源 dmv 看起來也不錯。
無法使用 HRESULT 0x80131022 進入公共語言執行時 (CLR)。這可能是由於資源條件低。(D b)
這是我從系統資源管理器池中得到的
Resource Pool Name cache_memory (MB) used_memory (MB) internal 104.773437 1577.125000 default 37.609375 38.796875 SloSecSharedPool 2.914062 8.156250 InMemBackupRestorePool 26.210937 101.437500 InMemDmvCollectorPool 186.195312 203.406250 InMemMetricsDownloaderPool 2.234375 2.250000 InMemDTAPool 0.000000 0.000000 SloHkPool 0.000000 0.031250 InMemQueryStorePool 22.453125 35.304687 InMemWIAutoTuningPool 3.312500 4.062500 InMemXdbLoginPool 3.976562 6.250000 PVSCleanerPool 0.000000 0.000000 InMemTdeScanPool 0.000000 0.000000 SloSharedPool1 1108.890625 1234.312500
從 sys.dm_os_performance_counters 來看,這是過去 3 小時的樣子。
cpu% data_io% log_write% memory_usage% max_worker% sessions% 22.37 73.51 16.54 41.56 5.50 0.43
這似乎不是 SQL Azure 的常見錯誤,因為我找不到與 SQL Server 2008 之後發生的這種情況有關的任何事情。任何幫助將不勝感激。
更新:
我們收到了 Microsoft 支持代表的回复,看起來我們的記憶體使用量已完全用完。
將彈性池向上移動一層後,錯誤就消失了。我們有約 56GB 的記憶體,而不是之前的約 28GB,並且錯誤停止了。這可能還會將我們轉移到 Azure 上的另一台伺服器,這可能已經解決了現在的問題。該站點的記憶體使用率一直在 78% 左右,緩衝區記憶體命中率 @ 8588 和 PLE 為 87332。現在它的 CPU、Workers、DataIO 等在正常負載期間的使用率均低於 2%,這似乎像一個巨大的浪費。
我們無法明確確定導致錯誤的原因,但我們認為這是完整的記憶體使用情況,因為該站點目前執行良好……
雖然 Azure SQL 數據庫(不是新的託管實例)不支持自定義 SQLCLR 程序集(即“啟用 CLR”的伺服器級配置選項),但 CLR 仍在內部用於以下功能:
- CLR 數據類型:
- 幾何學
- 地理
- 等級制
- 內置功能:
在 SQL Server 2012 中引入:
FORMAT
PARSE
TRY_PARSE
在 SQL Server 2016 中引入:
AT TIME ZONE
COMPRESS
DECOMPRESS
sys.time_zone_info
也許其他人
- SSIS(模糊查找/
sp_FuzzyLookupTableMaintenanceInvoke
等)- 變更數據擷取 (CDC)
- 複製
- 主數據服務
- 基於策略的管理(PBM;最初名為“動態管理框架(DMF)”)
- 外部表(包括外部數據源和可能的外部文件格式):此功能是 SQL Server 2016 的新功能,並且此功能在內部使用 CLR 已在 Joe 和 Henrik 的其他答案中提到。Joe 和 Henrik 都表示微軟告知外部表依賴於 CLR,雖然我無法直接確認這一點(通過查看在使用任何此功能時創建的系統應用程序域),但我至少能夠確認啟用“Lightweight Pooling”模式後,所有 3 個組件都失敗並出現以下錯誤:
消息 7432,級別 16,狀態 0,行 XXXXX
異構查詢和使用 OLEDB 提供程序在光纖模式下不受支持。
- 也許其他人
當然,這並不意味著什麼會佔用記憶體。但它應該有助於辨識受影響的區域。