Condividi tramite


sys.dm_clr_appdomains (Transact-SQL)

Restituisce una riga per ogni dominio dell'applicazione nel server. Il dominio dell'applicazione (AppDomain) è un costrutto nella funzionalità Common Language Runtime (CLR) di Microsoft .NET Framework che corrisponde all'unità di isolamento per un'applicazione. È possibile utilizzare questa vista per identificare gli oggetti dell'integrazione con CLR che sono in esecuzione in Microsoft SQL Server, nonché risolvere i problemi relativi a tali oggetti.

Esistono diversi tipi di oggetti di database gestito dell'integrazione con CLR. Per informazioni generali su tali oggetti, vedere Compilazione di oggetti di database con l'integrazione con CLR (Common Language Runtime). Ogni volta che questi oggetti vengono eseguiti, in SQL Server viene creato un AppDomain in cui viene caricato ed eseguito il codice necessario. Il livello di isolamento per un AppDomain corrisponde a un AppDomain per database per proprietario. Ovvero, tutti gli oggetti CLR di proprietà di un utente vengono eseguiti sempre nello stesso dominio AppDomain per ogni database (se un utente registra oggetti di database CLR in database diversi, gli oggetti di database CLR verranno eseguiti in domini dell'applicazione diversi). Al termine dell'esecuzione del codice, AppDomain non viene eliminato, ma viene memorizzato nella cache per le future esecuzioni. In questo modo le prestazioni risultano migliorate.

Per ulteriori informazioni, vedere Domini applicazione.

Nome colonna

Tipo di dati

Descrizione

appdomain_address

varbinary(8)

Indirizzo del dominio AppDomain. Tutti gli oggetti di database gestito di proprietà di un utente vengono sempre caricati nello stesso AppDomain. È possibile utilizzare questa colonna per cercare tutti gli assembly attualmente caricati in questo AppDomain in sys.dm_clr_loaded_assemblies.

appdomain_id

int

ID del dominio AppDomain. Ogni AppDomain dispone di un ID univoco.

appdomain_name

varchar(386)

Nome dell'AppDomain assegnato da SQL Server.

creation_time

datetime

Ora di creazione del dominio AppDomain. Poiché gli AppDomain vengono memorizzati nella cache e riutilizzati per migliorare le prestazioni, il valore di creation_time non rappresenta necessariamente l'ora in cui il codice è stato eseguito.

db_id

int

ID del database in cui questo AppDomain è stato creato. I codici archiviati in due database diversi non possono condividere un unico AppDomain.

user_id

int

ID dell'utente i cui oggetti possono essere eseguiti in questo AppDomain.

stato

nvarchar(128)

Descrittore per lo stato corrente di AppDomain. Un AppDomain può trovarsi in stati diversi dalla creazione all'eliminazione. Per ulteriori informazioni, vedere la sezione Osservazioni di questo argomento.

strong_refcount

int

Numero di riferimenti forti al dominio AppDomain. Questo valore riflette il numero di batch attualmente in esecuzione che utilizzano questo AppDomain. Si noti che l'esecuzione di questa vista consente di creare uno strong refcount. Anche se attualmente non è in esecuzione alcun codice, il valore di strong_refcount sarà 1.

weak_refcount

int

Numero di riferimenti deboli al dominio AppDomain corrente. Tale valore indica il numero di oggetti di AppDomain memorizzati nella cache. In SQL Server quando si esegue un oggetto di database gestito, tale oggetto viene memorizzato nella cache all'interno di AppDomain per il riutilizzo futuro. In questo modo le prestazioni risultano migliorate.

cost

int

Costo del dominio AppDomain. Più elevato è il costo più è probabile che questo AppDomain debba essere scaricato perché la quantità di memoria disponibile è insufficiente. Il costo dipende in genere dalla quantità di memoria necessaria per ricreare questo AppDomain.

value

int

Valore del dominio AppDomain. Più basso è il valore più è probabile che questo AppDomain debba essere scaricato perché la quantità di memoria disponibile è insufficiente. Il valore dipende in genere dal numero di connessioni o batch che utilizzano AppDomain.

total_processor_time_ms

bigint

Tempo totale del processore, in millisecondi, utilizzato da tutti i thread durante l'esecuzione nel dominio dell'applicazione corrente dall'avvio del processo. Equivale a System.AppDomain.MonitoringTotalProcessorTime.

total_allocated_memory_kb

bigint

Dimensioni totali, in kilobyte, di tutte le allocazioni di memoria eseguite dal dominio dell'applicazione dalla sua creazione, senza sottrarre la memoria raccolta. Equivale a System.AppDomain.MonitoringTotalAllocatedMemorySize.

survived_memory_kb

bigint

Numero di kilobyte rimanenti dall'ultima raccolta di blocco completa e a cui fa riferimento il dominio dell'applicazione corrente. Equivale a System.AppDomain.MonitoringSurvivedMemorySize.

Osservazioni

Tra dm_clr_appdomains.appdomain_address e dm_clr_loaded_assemblies.appdomain_address esiste una relazione uno-a-molti.

Nelle tabelle seguenti vengono elencati i possibili valori di state e le loro descrizioni. Le tabelle contengono inoltre informazioni sul momento del ciclo di vita di AppDomain in cui tali valori si presentano. Queste informazioni risultano utili per seguire il ciclo di vita di un AppDomain, nonché per monitorare lo scaricamento di istanze di AppDomain sospette o ripetitive senza analizzare il registro eventi di Windows.

Inizializzazione di AppDomain

Stato

Descrizione

E_APPDOMAIN_CREATING

È in corso la creazione dell'AppDomain.

Utilizzo di AppDomain

Stato

Descrizione

E_APPDOMAIN_SHARED

L'AppDomain di run-time è pronto per essere utilizzato da più utenti.

E_APPDOMAIN_SINGLEUSER

L' AppDomain è pronto per l'utilizzo nelle operazioni DDL. Queste ultime differiscono da E_APPDOMAIN_SHARED per il fatto che gli AppDomain condivisi vengono utilizzati per le esecuzioni di integrazione di CLR e non per operazioni DDL. Tali AppDomain sono isolati da altre operazioni simultanee.

E_APPDOMAIN_DOOMED

Lo scaricamento di AppDomain è pianificato ma sono ancora presenti thread attualmente in esecuzione in tale dominio.

Eliminazione di AppDomain

Stato

Descrizione

E_APPDOMAIN_UNLOADING

SQL Server ha richiesto lo scaricamento di AppDomain da parte di CLR. In genere questa richiesta viene eseguita in seguito alla modifica o alla rimozione dell'assembly contenente gli oggetti di database gestito.

E_APPDOMAIN_UNLOADED

Il CLR ha scaricato l'AppDomain. Questo è in genere il risultato di una procedura di escalation dovuta a ThreadAbort, OutOfMemory o un'eccezione non gestita nel codice utente.

E_APPDOMAIN_ENQUEUE_DESTROY

L'AppDomain è stato scaricato in CLR e impostato per l'eliminazione da parte di SQL Server.

E_APPDOMAIN_DESTROY

L'AppDomain è in corso di eliminazione da parte di SQL Server.

E_APPDOMAIN_ZOMBIE

L'AppDomain è stato eliminato da SQL Server, ma non sono stati eliminati tutti i riferimenti all'AppDomain.

Autorizzazioni

È richiesta l'autorizzazione VIEW SERVER STATE nel database.

Esempi

Nell'esempio seguente viene illustrato come visualizzare i dettagli relativi a un AppDomain per un determinato assembly:

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)

Nell'esempio seguente viene illustrato come visualizzare tutti gli assembly di un determinato AppDomain:

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)

Vedere anche

Riferimento

sys.dm_clr_loaded_assemblies (Transact-SQL)

Viste a gestione dinamica relative a CLR (Common Language Runtime) (Transact-SQL)