在 SQL Azure DB 上遇到 CLR 错误

Bra*_*ber 7 sql-server azure-sql-database sql-clr

我们突然开始看到这个错误,而且在调用我们的弹性池中的数据库或任何其他数据库时,它似乎经常发生。DTU 没有被最大化,资源 dmvs 看起来也不错。

无法使用 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
Run Code Online (Sandbox Code Playgroud)

从 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
Run Code Online (Sandbox Code Playgroud)

这似乎不是 SQL Azure 的常见错误,因为我找不到与 SQL Server 2008 之后发生的这种情况有关的任何事情。任何帮助将不胜感激。

更新:

我们收到了 Microsoft 支持代表的回复,看起来我们的内存使用量已完全限制。

弹性池资源使用情况

将弹性池向上移动一层后,错误消失了。我们有 ~56GB 的内存,而不是我们之前的 ~28GB,并且错误停止了。这可能也会将我们转移到 Azure 上的另一台服务器,这可能暂时解决了问题。该站点的内存使用率一直在 78% 左右,缓冲区缓存命中率 @ 8588,PLE 为 87332。现在它在正常负载期间以低于 2% 的 CPU、Worker、DataIO 等使用率运行,这似乎就像一个巨大的浪费。

我们无法明确确定导致错误的原因,但我们假设这是完整的内存使用情况,因为该站点目前运行良好......

Sol*_*zky 4

虽然 Azure SQL 数据库(不是新的托管实例)不支持自定义 SQLCLR 程序集(即“启用 CLR”服务器级配置选项),但 CLR 仍在内部使用以下功能:

  1. CLR 数据类型:
    • 几何学
    • 地理
    • 层次结构
  2. 内置函数:
    • SQL Server 2012 中引入:
      • FORMAT
      • PARSE
      • TRY_PARSE
    • SQL Server 2016 中引入:
      • AT TIME ZONE
      • COMPRESS
      • DECOMPRESS
      • sys.time_zone_info
    • 也许其他人
  3. SSIS(模糊查找/sp_FuzzyLookupTableMaintenanceInvoke等)
  4. 变更数据捕获 (CDC)
  5. 复制
  6. 主数据服务
  7. 基于策略的管理(PBM;原名为“动态管理框架(DMF)”)
  8. 外部表(包括外部数据源和可能的外部文件格式):此功能是 SQL Server 2016 中的新功能,并且 Joe 和 Henrik 在此处的其他答案中已经提到了内部使用 CLR 的此功能。Joe 和 Henrik 都表示 Microsoft 告诉外部表依赖于 CLR,虽然我无法直接确认这一点(通过查看使用任何此功能时创建的系统应用程序域),但我至少能够确认启用“轻量级池”模式时,所有这 3 个组件都会失败并出现以下错误:

    消息 7432,级别 16,状态 0,第 XXXXX 行
    光纤模式下不支持异构查询和使用 OLEDB 提供程序。

  9. 也许其他人

当然,这并不是指什么占用内存。但它应该有助于识别受影响的区域。