sys.dm_clr_loaded_assemblies (Transact-SQL)
適用対象: SQL サーバー
サーバー アドレス空間に読み込まれた各マネージド ユーザー アセンブリの行を返します。 このビューを使用して、Microsoft SQL Server で実行されている CLR 統合マネージド データベース オブジェクトについて理解し、トラブルシューティングを行います。
アセンブリは、マネージド データベース オブジェクトを定義して SQL Server に配置するために使用されるマネージド コード DLL ファイルです。 ユーザーがこれらのマネージド データベース オブジェクトのいずれかを実行するたびに、SQL Server と CLR によって、マネージド データベース オブジェクトが定義されているアセンブリ (およびその参照) が読み込まれます。 アセンブリは、パフォーマンスを向上させるために SQL Server に読み込まれたままになります。そのため、アセンブリに含まれるマネージド データベース オブジェクトを将来呼び出すことができます。アセンブリを再読み込みする必要があります。 アセンブリは、SQL Server がメモリ不足になるまでアンロードされません。 アセンブリと CLR 統合の詳細については、「 CLR ホスト環境を参照してください。 マネージド データベース オブジェクトの詳細については、「 共通言語ランタイム (CLR) 統合を使用したデータベース オブジェクトの構築」を参照してください。
列名 | データ型 | 説明 |
---|---|---|
assembly_id | int | 読み込まれたアセンブリの ID。 assembly_idを使用すると、sys.assemblies (Transact-SQL) カタログ ビューでアセンブリに関する詳細情報を検索できます。 Transact-SQL sys.assemblies カタログには、現在のデータベース内のアセンブリのみが表示されることに注意してください。 sqs.dm_clr_loaded_assemblies ビューには、サーバーに読み込まれたすべてのアセンブリが表示されます。 |
appdomain_address | int | アセンブリが読み込まれるアプリケーション ドメイン (AppDomain) のアドレス。 1 人のユーザーが所有するすべてのアセンブリは、常に同じ 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);