Sql-Server

在 SQL Azure DB 上遇到 CLR 錯誤

  • August 27, 2020

我們突然開始看到此錯誤,並且在呼叫數據庫或彈性池中的任何其他數據庫時似乎相當頻繁地發生。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 仍在內部用於以下功能:

  1. CLR 數據類型:
  • 幾何學
  • 地理
  • 等級制
  1. 內置功能:
  • 在 SQL Server 2012 中引入:

    • FORMAT
    • PARSE
    • TRY_PARSE
  • 在 SQL Server 2016 中引入:

    • AT TIME ZONE
    • COMPRESS
    • DECOMPRESS
    • sys.time_zone_info
  • 也許其他人

  1. SSIS(模糊查找/sp_FuzzyLookupTableMaintenanceInvoke等)
  2. 變更數據擷取 (CDC)
  3. 複製
  4. 主數據服務
  5. 基於策略的管理(PBM;最初名為“動態管理框架(DMF)”)
  6. 外部表(包括外部數據源和可能的外部文件格式):此功能是 SQL Server 2016 的新功能,並且此功能在內部使用 CLR 已在 Joe 和 Henrik 的其他答案中提到。Joe 和 Henrik 都表示微軟告知外部表依賴於 CLR,雖然我無法直接確認這一點(通過查看在使用任何此功能時創建的系統應用程序域),但我至少能夠確認啟用“Lightweight Pooling”模式後,所有 3 個組件都失敗並出現以下錯誤:

消息 7432,級別 16,狀態 0,行 XXXXX

異構查詢和使用 OLEDB 提供程序在光纖模式下不受支持。

  1. 也許其他人

當然,這並不意味著什麼佔用記憶體。但它應該有助於辨識受影響的區域。

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