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);