Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Returnerar en rad för varje applikationsdomän på servern. Applikationsdomänen (AppDomain) är en konstruktion i Microsoft .NET Framework common language runtime (CLR) som är isoleringsenheten för en applikation. Du kan använda denna vy för att förstå och felsöka CLR-integrationsobjekt som körs i Microsoft SQL Server.
Det finns flera typer av CLR-integrationsobjekt för hanterad databas. För allmän information om dessa objekt, se Building Database Objects with Common Language Runtime (CLR) Integration. När dessa objekt körs skapar SQL Server en AppDomain under vilken den kan ladda och köra den nödvändiga koden. Isoleringsnivån för en AppDomain är en AppDomain per databas per ägare. Det vill säga, alla CLR-objekt som ägs av en användare körs alltid i samma AppDomain per databas (om en användare registrerar CLR-databasobjekt i olika databaser kommer CLR-databasobjekten att köras i olika applikationsdomäner). En AppDomain förstörs inte efter att koden är klar med exekveringen. Istället cachelagras den i minnet för framtida körningar. Detta förbättrar prestandan.
För mer information, se Application Domains.
| Kolumnnamn | Datatyp | Beskrivning |
|---|---|---|
| appdomain_address | varbinary(8) | Adress till AppDomain. Alla hanterade databasobjekt som ägs av en användare laddas alltid i samma AppDomain. Du kan använda denna kolumn för att slå upp alla assemblies som för närvarande laddas i denna AppDomain i sys.dm_clr_loaded_assemblies. |
| appdomain_id | int | ID för AppDomain. Varje AppDomain har ett unikt ID. |
| appdomain_name | Varchar(386) | Namnet på AppDomain som tilldelats av SQL Server. |
| creation_time | datetime | Tiden då AppDomain skapades. Eftersom AppDomains cachas och återanvänds för bättre prestanda är creation_time inte nödvändigtvis den tid då koden kördes. |
| db_id | int | ID för databasen där denna AppDomain skapades. Kod lagrad i två olika databaser kan inte dela en AppDomain. |
| user_id | int | ID för användaren vars objekt kan köras i denna AppDomain. |
| state | nvarchar(128) | En beskrivning av AppDomains aktuella tillstånd. En AppDomain kan befinna sig i olika tillstånd från skapande till borttagning. Se avsnittet om kommentarer i denna artikel för mer information. |
| strong_refcount | int | Många starka referenser till denna AppDomain. Detta speglar antalet batchar som för närvarande körs och använder denna AppDomain. Genomförandet av denna uppfattning kommer att skapa en stark omräkning; även om det inte är någon kod som för närvarande körs, kommer strong_refcount att ha värdet 1. |
| weak_refcount | int | Antal svaga referenser till denna AppDomain. Detta anger hur många objekt som finns i AppDomain som är cachade. När du kör ett hanterat databasobjekt cachar SQL Server det i AppDomain för framtida återanvändning. Detta förbättrar prestandan. |
| cost | int | Kostnaden för AppDomain. Ju högre kostnaden, desto mer sannolikt är det att denna AppDomain lastas av under minnestryck. Kostnaden beror vanligtvis på hur mycket minne som krävs för att återskapa denna AppDomain. |
| värde | int | Värdet av AppDomain. Ju lägre värde, desto mer sannolikt är det att denna AppDomain tas av under minnestryck. Värdet beror vanligtvis på hur många anslutningar eller batcher som använder denna AppDomain. |
| total_processor_time_ms | bigint | Total processortid, i millisekunder, använd av alla trådar under körning i den aktuella applikationsdomänen sedan processen startade. Detta motsvarar System.AppDomain.MonitoringTotalProcessorTime. |
| total_allocated_memory_kb | bigint | Total storlek, i kilobyte, av alla minnesallokeringar som har gjorts av applikationsdomänen sedan den skapades, utan att subtrahera det insamlade minnet. Detta motsvarar System.AppDomain.MonitoringTotalAllocatedMemorySize. |
| survived_memory_kb | bigint | Antal kilobyte som överlevde den senaste fulla, blockerande samlingen och som är kända för att refereras av den aktuella applikationsdomänen. Detta motsvarar System.AppDomain.MonitoringSurvivedMemorySize. |
Anmärkningar
Det finns en en-till-många-relation mellan dm_clr_appdomains.appdomain_address och dm_clr_loaded_assemblies.appdomain_address.
Följande tabeller listar möjliga tillståndsvärden , deras beskrivningar och när de inträffar i AppDomains livscykel. Du kan använda denna information för att följa livscykeln för en AppDomain och för att hålla utkik efter misstänkta eller upprepande AppDomain-instanser som avlastas, utan att behöva analysera Windows händelselogg.
AppDomain-initiering
| Tillstånd | Beskrivning |
|---|---|
| E_APPDOMAIN_CREATING | AppDomain håller på att skapas. |
AppDomain-användning
| Tillstånd | Beskrivning |
|---|---|
| E_APPDOMAIN_SHARED | Runtime-AppDomain är redo att användas av flera användare. |
| E_APPDOMAIN_SINGLEUSER | AppDomain är redo att användas i DDL-operationer. Dessa skiljer sig från E_APPDOMAIN_SHARED genom att delade AppDomains används för CLR-integrationsexekveringar istället för DDL-operationer. Sådana AppDomains är isolerade från andra samtidiga operationer. |
| E_APPDOMAIN_DOOMED | AppDomain är planerad att laddas ut, men det körs för närvarande trådar i den. |
AppDomain Cleanup
| Tillstånd | Beskrivning |
|---|---|
| E_APPDOMAIN_UNLOADING | SQL Server har begärt att CLR ska lasta ur AppDomain, vanligtvis eftersom assembleren som innehåller de hanterade databasobjekten har ändrats eller tagits bort. |
| E_APPDOMAIN_UNLOADED | CLR har avlastat AppDomain. Detta är vanligtvis resultatet av en eskaleringsprocedur på grund av ThreadAbort, OutOfMemory eller ett ohanterat undantag i användarkoden. |
| E_APPDOMAIN_ENQUEUE_DESTROY | AppDomain har avlastats i CLR och satts att förstöras av SQL Server. |
| E_APPDOMAIN_DESTROY | AppDomain håller på att förstöras av SQL Server. |
| E_APPDOMAIN_ZOMBIE | AppDomain har förstörts av SQL Server; dock har inte alla referenser till AppDomain rensats bort. |
Permissions
Kräver VIEW SERVER STATE-behörighet i databasen.
Behörigheter för SQL Server 2022 och senare
Kräver VIEW SERVER PERFORMANCE STATE behörighet på servern.
Examples
Följande exempel visar hur man ser detaljerna i en AppDomain för en given 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);
Följande exempel visar hur man ser alla assemblies i en given 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);