Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server
Devolve uma linha para cada domínio de aplicação no servidor. O domínio de aplicação (AppDomain) é uma construção no tempo de execução da linguagem comum (CLR) do Microsoft .NET Framework, que é a unidade de isolamento de uma aplicação. Pode usar esta vista para compreender e diagnosticar objetos de integração CLR que estão a ser executados no Microsoft SQL Server.
Existem vários tipos de objetos de base de dados geridos com integração CLR. Para informações gerais sobre estes objetos, veja Construção de Objetos de Base de Dados com Integração com Tempo de Execução Common Language (CLR). Sempre que estes objetos são executados, o SQL Server cria um AppDomain sob o qual pode carregar e executar o código necessário. O nível de isolamento para um AppDomain é de um AppDomain por base de dados e proprietário. Ou seja, todos os objetos CLR pertencentes a um utilizador são sempre executados no mesmo AppDomain por base de dados (se um utilizador registar objetos de base de dados CLR em bases de dados diferentes, os objetos de base de dados CLR correrão em domínios de aplicação diferentes). Um AppDomain não é destruído depois de o código terminar de ser executado. Em vez disso, está guardado na memória para futuras execuções. Isso melhora o desempenho.
Para mais informações, consulte Domínios de Aplicação.
| Nome da coluna | Tipo de dados | Description |
|---|---|---|
| appdomain_address | varbinário(8) | Endereço do AppDomain. Todos os objetos de base de dados geridos pertencentes a um utilizador são sempre carregados no mesmo AppDomain. Pode usar esta coluna para consultar todos os assemblies atualmente carregados neste AppDomainem sys.dm_clr_loaded_assemblies. |
| appdomain_id | int | ID do AppDomain. Cada AppDomain tem um ID único. |
| appdomain_name | Varchar(386) | Nome do AppDomain atribuído pelo SQL Server. |
| creation_time | datetime | A altura em que o AppDomain foi criado. Como os AppDomains são armazenados em cache e reutilizados para melhor desempenho, creation_time não é necessariamente o momento em que o código foi executado. |
| db_id | int | ID da base de dados onde este AppDomain foi criado. O código armazenado em duas bases de dados diferentes não pode partilhar um único AppDomain. |
| user_id | int | ID do utilizador cujos objetos podem ser executados neste AppDomain. |
| state | nvarchar(128) | Um descritor para o estado atual do AppDomain. Um AppDomain pode estar em diferentes estados desde a criação até à eliminação. Consulte a secção de Observações deste artigo para mais informações. |
| strong_refcount | int | Número de referências fortes a este AppDomain. Isto reflete o número de lotes atualmente em execução que utilizam este AppDomain. A execução desta visão criará uma forte contagem de referências; Mesmo que não haja código em execução, strong_refcount terá um valor de 1. |
| weak_refcount | int | Número de referências fracas a este AppDomain. Isto indica quantos objetos dentro do AppDomain estão armazenados em cache. Quando executa um objeto de base de dados gerida, o SQL Server armazena-o em cache dentro do AppDomain para reutilização futura. Isso melhora o desempenho. |
| cost | int | Custo do AppDomain. Quanto maior o custo, maior a probabilidade de este AppDomain ser descarregado sob pressão de memória. O custo geralmente depende da quantidade de memória necessária para recriar este AppDomain. |
| valor | int | Valor do AppDomain. Quanto menor for o valor, maior a probabilidade de este AppDomain ser descarregado sob pressão de memória. O valor geralmente depende de quantas ligações ou lotes estão a usar este AppDomain. |
| total_processor_time_ms | bigint | Tempo total de processador, em milissegundos, utilizado por todas as threads durante a execução no domínio de aplicação atual desde o início do processo. Isto é equivalente a System.AppDomain.MonitoringTotalProcessorTime. |
| total_allocated_memory_kb | bigint | Tamanho total, em kilobytes, de todas as alocações de memória feitas pelo domínio de aplicação desde a sua criação, sem subtrair a memória que foi recolhida. Isto é equivalente a System.AppDomain.MonitoringTotalAllocatedMemorySize. |
| survived_memory_kb | bigint | Número de kilobytes que sobreviveram à última coleção completa bloqueante e que se sabe serem referenciados pelo domínio de aplicação atual. Isto é equivalente a System.AppDomain.MonitoringSurvivedMemorySize. |
Remarks
Existe uma relação de um-para-muitos entre dm_clr_appdomains.appdomain_address e dm_clr_loaded_assemblies.appdomain_address.
As tabelas seguintes listam possíveis valores de estado , as suas descrições e quando ocorrem no ciclo de vida do AppDomain . Pode usar esta informação para acompanhar o ciclo de vida de um AppDomain e para observar instâncias suspeitas ou repetitivas a descarregar, sem ter de analisar o Registo de Eventos do Windows.
Inicialização AppDomain
| State | Description |
|---|---|
| E_APPDOMAIN_CREATING | O AppDomain está a ser criado. |
Utilização do AppDomain
| State | Description |
|---|---|
| E_APPDOMAIN_SHARED | O AppDomain em tempo de execução está pronto para uso por vários utilizadores. |
| E_APPDOMAIN_SINGLEUSER | O AppDomain está pronto para utilização em operações DDL. Estes diferem dos E_APPDOMAIN_SHARED porque os AppDomains partilhados são usados para execuções de integração CLR, ao contrário das operações DDL. Tais AppDomains estão isolados de outras operações concorrentes. |
| E_APPDOMAIN_DOOMED | O AppDomain está programado para ser descarregado, mas atualmente há threads a ser executados nele. |
Limpeza do AppDomain
| State | Description |
|---|---|
| E_APPDOMAIN_UNLOADING | O SQL Server solicitou que o CLR descarregasse o AppDomain, geralmente porque o assembly que contém os objetos da base de dados gerida foi alterado ou eliminado. |
| E_APPDOMAIN_UNLOADED | O CLR descarregou o AppDomain. Isto é geralmente resultado de um procedimento de escalonamento devido a ThreadAbort, OutOfMemory ou uma exceção não tratada no código do utilizador. |
| E_APPDOMAIN_ENQUEUE_DESTROY | O AppDomain foi descarregado no CLR e configurado para ser destruído pelo SQL Server. |
| E_APPDOMAIN_DESTROY | O AppDomain está em processo de ser destruído pelo SQL Server. |
| E_APPDOMAIN_ZOMBIE | O AppDomain foi destruído pelo SQL Server; no entanto, nem todas as referências ao AppDomain foram eliminadas. |
Permissions
Requer VIEW permissão de ESTADO do SERVIDOR na base de dados.
Permissões para SQL Server 2022 e posterior
Requer VIEW permissão ESTADO DE DESEMPENHO DO SERVIDOR no servidor.
Examples
O exemplo seguinte mostra como visualizar os detalhes de um AppDomain para uma dada assembleia:
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);
O exemplo seguinte mostra como visualizar todos os assemblies num determinado 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);
Ver também
sys.dm_clr_loaded_assemblies (Transact-SQL)
Vistas de Gestão Dinâmica Relacionadas com o Tempo de Execução da Common Language (Transact-SQL)