SQL Server Management Studio (SSMS) 中活动监视器中的 SQLCLR 等待类型是什么?

Kei*_*era 10 sql-server activity-monitor sql-server-2012 sql-clr

当我检查我们的 SQL Prod 服务器时,每次打开活动监视器时,我总是SQLCLR在活动监视器的资源等待部分的第一个列表中看到。它总是有一个很高的数字。是SQLCLR为了什么?SQLCLR在活动监视器中具有高资源等待数的服务器是否有害?

Sol*_*zky 11

SQLCLR 是在 SQL Server 中运行 .NET 代码的能力。

当人们谈到 SQLCLR 时,他们通常指的是编写自定义 .NET 代码(存储过程、函数、触发器、用户定义类型和用户定义聚合)的能力。在这种情况下,可以通过 中的“clr enabled”服务器选项打开和关闭此功能sp_configure,我相信它在 Surface Area Configuration GUI 中称为“CLR Integration”。添加 .NET 功能需要使用CREATE ASSEMBLY将已编译的 .NET 代码加载到 SQL Server 中。

但是,即使将“clr enabled”选项设置为0/“off”/“disabled”,CLR 功能仍然用于内部功能和一些内置功能,并且将始终存在,除非“使用 Windows 光纤”/“轻量级池”选项已启用。

有关 SQLCLR 是什么、不是什么以及它能做什么的非常详细的描述,请参阅我在 SQL Server Central 上写的关于此主题的文章:通往 SQLCLR 级别 1 的阶梯:什么是 SQLCLR?(需要免费注册才能查看该站点上的内容)。以下 StackOverflow 回答中提供了该文章的精简版本:我们何时需要 SQL Server 中的 CLR 函数?.

如果您想知道实例是否允许将自定义.NET 代码添加到数据库,请运行以下命令并检查“run_value”字段:

EXEC sp_configure 'clr enabled';
Run Code Online (Sandbox Code Playgroud)

关于资源监视器中SQLCLR等待类型的含义,请参见以下博文:

工作原理:SQL Server 2008 活动监视器中 SQLCLR 等待类别的背后是什么

我相信该帖子中的相关行(因为它与您正在查看的 SQLCLR 类别有关)是:

我发现一些 wait_types 应该被忽略,因为它们是预期的等待。

  • `SELECT * FROM sys.dm_os_wait_stats WHERE wait_type IN ('CLR_AUTO_EVENT', 'CLR_CRST', 'CLR_JOIN', 'CLR_MANUAL_EVENT', 'CLR_MEMORY_SPY', 'CLR_MONITOR', 'CLR_RW', 'CLR_RW_LOCK_READERW',LRRTERW', LRRIERRW' , 'CLRHOST_STATE_ACCESS', 'ASSEMBLY_LOAD', 'FS_GARBAGE_COLLECTOR_SHUTDOWN', 'SQLCLR_APPDOMAIN', 'SQLCLR_ASSEMBLY', 'SQLCLR_DEADLOCK_DETECTION', 'SQLCLR_QUANTUM_PUDERNISHMENT', 'SQLCLR_QUANTUM_PUDERNISHMENT'等待') (3认同)