sys.dm_clr_appdomains (Transact-SQL)
Renvoie une ligne pour chaque domaine d'application du serveur. Le domaine d'application (AppDomain) est une construction dans le langage CLR Microsoft .NET Framework (Common Language Runtime) qui représente l'unité d'isolement d'une application. Vous pouvez utiliser cette vue pour comprendre et résoudre les objets d'intégration CLR qui sont en cours d'exécution dans Microsoft SQL Server.
Il existe plusieurs types d'objets de base de données managés d'intégration CLR. Pour obtenir des informations générales sur ces objets, consultez Création d'objets de base de données avec l'intégration CLR (Common Language Runtime). Dès lors que ces objets sont exécutés, SQL Server crée un domaine d'application AppDomain dans lequel il peut charger et exécuter le code requis. Le niveau d'isolement pour un domaine d'application AppDomain est un domaine d'application AppDomain par base de données et par propriétaire. Autrement dit, tous les objets CLR détenus par un utilisateur sont toujours exécutés dans le même AppDomain par base de données (si un utilisateur inscrit des objets de base de données CLR dans des bases de données différentes, ces objets s'exécuteront dans différents domaines d'application). Le domaine d'application AppDomain n'est pas supprimé une fois que l'exécution du code est terminée. Il est mis en cache dans la mémoire pour les prochaines exécutions. Les performances en sont alors améliorées.
Pour plus d'informations, consultez Domaines d'application.
Nom de la colonne |
Type de données |
Description |
---|---|---|
appdomain_address |
varbinary(8) |
Adresse du domaine d'application AppDomain. Tous les objets de base de données managés appartenant à un utilisateur sont toujours chargés dans le même domaine d'application AppDomain. Vous pouvez utiliser cette colonne pour rechercher dans tous les assemblys en cours de chargement dans ce domaine d'application AppDomain dans sys.dm_clr_loaded_assemblies. |
appdomain_id |
int |
ID du domaine d'application AppDomain. Chaque domaine d'application AppDomain a un ID unique. |
appdomain_name |
varchar(386) |
Nom du domaine d'application AppDomain tel qu'il est assigné par SQL Server. |
creation_time |
datetime |
Heure de création du domaine d'application AppDomain. Dans la mesure où les domaines d'application AppDomains sont mis en cache et réutilisés pour améliorer les performances, creation_time ne correspond pas nécessairement au moment où le code a été exécuté. |
db_id |
int |
ID de la base de données dans laquelle le domaine d'application AppDomain a été créé. Le code stocké dans deux bases de données différentes ne peut pas partager un domaine d'application AppDomain. |
user_id |
int |
ID de l'utilisateur dont les objets peuvent s'exécuter dans le domaine d'application AppDomain. |
state |
nvarchar(128) |
Descripteur pour l'état actuel du domaine d'application AppDomain. Un domaine d'application AppDomain peut être dans différents états de sa création à sa suppression. Pour plus d'informations, consultez la section « Remarques » de cette rubrique. |
strong_refcount |
int |
Nombre de références fortes au domaine d'application AppDomain. Cela reflète le nombre de traitements en cours d'exécution qui utilisent le domaine d'application AppDomain. Notez que l'exécution de cette vue entraîne la création d'un compteur de références fortes ; même si aucun code n'est en cours d'exécution, strong_refcount aura une valeur de 1. |
weak_refcount |
int |
Nombre de références faibles au domaine d'application AppDomain. Cela indique le nombre d'objets contenus dans le domaine d'application AppDomain qui sont mis en cache. Lorsque vous exécutez un objet de base de données managé, SQL Server le met en cache dans le domaine d'application AppDomain pour le réutiliser par la suite. Les performances en sont alors améliorées. |
cost |
int |
Coût du domaine d'application AppDomain. Plus le coût est élevé, plus il y a de chances que le domaine d'application AppDomain soit déchargé si la mémoire est insuffisante. En général, le coût dépend de la quantité de mémoire requise pour recréer le domaine d'application AppDomain. |
value |
int |
Valeur du domaine d'application AppDomain. Plus la valeur est basse, plus il y a de chances que le domaine d'application AppDomain soit déchargé si la mémoire est insuffisante. En général, la valeur dépend du nombre de connexions ou de traitements qui utilisent le domaine d'application AppDomain. |
total_processor_time_ms |
bigint |
Temps processeur total, en millisecondes, utilisé par tous les threads lors de l'exécution dans le domaine d'application actuel depuis le démarrage du processus. Ceci équivaut à System.AppDomain.MonitoringTotalProcessorTime. |
total_allocated_memory_kb |
bigint |
Taille totale, en kilo-octets, de toutes les allocations mémoire faites par le domaine d'application depuis sa création, sans soustraction de la mémoire recueillie. Ceci équivaut à System.AppDomain.MonitoringTotalAllocatedMemorySize. |
survived_memory_kb |
bigint |
Nombre de kilo-octets qui ont survécu à la dernière collection bloquante complète et connus pour être référencés par le domaine d'application actuel. Ceci équivaut à System.AppDomain.MonitoringSurvivedMemorySize. |
Notes
Il existe une relation un-à-plusieurs entre dm_clr_appdomains.appdomain_address et dm_clr_loaded_assemblies.appdomain_address.
Les tableaux suivants listent les valeurs d'état possibles, en donnent une description et précisent le moment où elles interviennent dans le cycle de vie du domaine d'application AppDomain. Vous pouvez utiliser ces informations pour suivre le cycle de vie d'un domaine d'application AppDomain et repérer le chargement d'instances AppDomain suspectes ou répétitives, sans avoir à analyser le journal des événements Windows.
Initialisation du domaine d'application AppDomain
État |
Description |
---|---|
E_APPDOMAIN_CREATING |
Le domaine d'application AppDomain est en cours de création. |
Utilisation du domaine d'application AppDomain
État |
Description |
---|---|
E_APPDOMAIN_SHARED |
Le domaine d'application AppDomain est prêt à être utilisé par plusieurs utilisateurs. |
E_APPDOMAIN_SINGLEUSER |
Le domaine d'application AppDomain est prêt à être utilisé dans les opérations DDL. Ceux-ci diffèrent d'E_APPDOMAIN_SHARED en ceci que les domaines d'application AppDomains partagés sont utilisés pour les exécutions d'intégration du CLR par opposition aux opérations DDL. Ces domaines d'application AppDomains sont isolés d'autres opérations simultanées. |
E_APPDOMAIN_DOOMED |
Le domaine d'application AppDomain est planifié pour être déchargé mais des threads y sont en cours d'exécution. |
Suppression du domaine d'application AppDomain
État |
Description |
---|---|
E_APPDOMAIN_UNLOADING |
SQL Server a demandé que le CLR décharge le domaine d'application AppDomain, généralement parce que l'assembly qui contient les objets de base de données managés a été altéré ou supprimé. |
E_APPDOMAIN_UNLOADED |
Le CLR a déchargé le domaine d'application AppDomain. Il s'agit généralement du résultat d'une procédure de remontée des problèmes causée par ThreadAbort, OutOfMemory ou une exception non gérée dans le code utilisateur. |
E_APPDOMAIN_ENQUEUE_DESTROY |
Le domaine d'application AppDomain a été déchargé dans le CLR et voué à être détruit par SQL Server. |
E_APPDOMAIN_DESTROY |
Le domaine d'application AppDomain est en cours de destruction par SQL Server. |
E_APPDOMAIN_ZOMBIE |
Le domaine d'application AppDomain a été détruit par SQL Server ; toutefois, les références au domaine d'application AppDomain n'ont pas toutes été supprimées. |
Autorisations
Nécessite l'autorisation VIEW SERVER STATE sur la base de données.
Exemples
L'exemple suivant montre comment afficher les détails d'un domaine d'application AppDomain pour un assembly donné :
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 = 500)
L'exemple suivant montre comment afficher tous les assemblys dans un domaine d'application AppDomain donné :
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
where l.appdomain_address =
(select appdomain_address
from sys.dm_clr_appdomains
where appdomain_id = 15)
Voir aussi
Référence
sys.dm_clr_loaded_assemblies (Transact-SQL)
Vues de gestion dynamique CLR (Common Language Runtime) (Transact-SQL)