sys.dm_clr_loaded_assemblies (Transact-SQL)

适用范围:SQL Server

为加载到服务器地址空间的每个托管用户程序集返回一行。 使用此视图可以了解和排查MICROSOFT SQL Server 中正在执行的 CLR 集成托管数据库对象的问题。

程序集是用于在 SQL Server 中定义和部署托管数据库对象的托管代码 DLL 文件。 每当用户执行其中一个托管数据库对象时,SQL Server 和 CLR 将加载在其中定义托管数据库对象的程序集(及其引用)。 程序集仍加载在 SQL Server 中以提高性能,以便将来可以调用程序集中包含的托管数据库对象,而无需重新加载程序集。 在 SQL Server 承受内存压力之前,不会卸载程序集。 有关程序集和 CLR 集成的详细信息,请参阅 CLR 托管环境。 有关托管数据库对象的详细信息,请参阅 使用公共语言运行时 (CLR) 集成生成数据库对象。

列名称 数据类型 描述
assembly_id int 已加载程序集的 ID。 assembly_id可用于查找有关 sys.assemblyies (Transact-SQL) 目录视图中程序集的详细信息。 请注意,Transact-SQL sys.assemblies 目录仅显示当前数据库中的程序集。 sqs.dm_clr_loaded_assemblies视图显示服务器上所有加载的程序集。
appdomain_address int 在其中加载程序集的应用程序域(AppDomain)的地址。 单个用户拥有的所有程序集始终在同一 AppDomain 中加载。 appdomain_address可用于在sys.dm_clr_appdomains视图中查找有关 AppDomain 的详细信息
load_time datetime 程序集的加载时间。 请注意,在 SQL Server 内存不足并卸载 AppDomain 之前,程序集将保持加载状态。 可以监视 load_time 以了解 SQL Server 内存压力和卸载 AppDomain 的频率。

权限

要求具有服务器的 VIEW SERVER STATE 权限。

SQL Server 2022 及更高版本的权限

要求对服务器具有 VIEW SERVER PERFORMANCE STATE 权限。

注解

dm_clr_loaded_assemblies.appdomain_address 视图与 dm_clr_appdomains.appdomain_address 具有多对一关系。 dm_clr_loaded_assemblies.assembly_id 视图与sys.assemblies.assembly_id具有一对多关系。

示例

以下示例显示如何查看当前加载的数据库中所有程序集的详细信息。

 SELECT a.name, a.assembly_id, a.permission_set_desc, a.is_visible, a.create_date, l.load_time   
FROM sys.dm_clr_loaded_assemblies AS l   
INNER JOIN sys.assemblies AS a  
ON l.assembly_id = a.assembly_id;  

以下示例演示如何查看加载给定程序集的 AppDomain 的详细信息。

SELECT appdomain_id, creation_time, db_id, user_id, state  
FROM sys.dm_clr_appdomains AS a  
WHERE appdomain_address =   
(SELECT appdomain_address   
 FROM sys.dm_clr_loaded_assemblies  
 WHERE assembly_id = 555);  

另请参阅

公共语言运行时相关的动态管理视图 (Transact-SQL)