Partager via


sys.dm_clr_appdomains

Mis à jour : 12 décembre 2006

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. Cela signifie que tous les objets CLR appartenant à un utilisateur sont toujours exécutés dans le même domaine d'application AppDomain. Le domaine d'application AppDomain n'est pas détruit 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)

État actuel du domaine d'application AppDomain. 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 lots 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 lots qui utilisent le domaine d'application AppDomain.

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é par un seul utilisateur pour exécuter des opérations DDL.

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
Fonctions et vues de gestion dynamique
Vues de gestion dynamique CLR (Common Language Runtime)

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

12 décembre 2006

Nouveau contenu :
  • Mise à jour de l'introduction et des remarques et ajout d'exemples.