sys.dm_clr_loaded_assemblies

为加载到服务器地址空间的每个托管用户程序集返回一行。使用该视图来了解和排除 MicrosoftSQL Server 中执行的 CLR 集成托管数据库对象遇到的问题。

程序集是用于定义托管数据库对象并在 SQL Server 中部署的托管代码 DLL 文件。只要用户执行了这些托管数据库对象中的一个,SQL Server 和 CLR 便会加载其中定义了托管数据库对象的程序集(及其引用)。将加载的程序集保留在 SQL Server 中可提高性能,以便将来可调用程序集中包含的托管数据库对象而无需重新加载该程序集。只有在 SQL Server 面临内存不足的压力时才会卸载该程序集。有关程序集和 CLR 集成的详细信息,请参阅 CLR 宿主环境。有关托管数据库对象的详细信息,请参阅 使用公共语言运行时 (CLR) 集成生成数据库对象

列名

数据类型

说明

assembly_id

int

已加载程序集的 ID。可以使用 assembly_idsys.assemblies (Transact-SQL) 目录视图中查找有关程序集的详细信息。请注意,Transact-SQLsys.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 权限。

注释

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 a
where appdomain_address = 
(select appdomain_address 
 from sys.dm_clr_loaded_assemblies
 where assembly_id = 555)