Partilhar via


sys.dm_exec_sessions (Transact-SQL)

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida do Azure SQLAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Ponto de Extremidade de Análise SQL no Microsoft FabricArmazém no Microsoft FabricBase de Dados SQL no Microsoft Fabric

Devolve uma linha por sessão autenticada no SQL Server. sys.dm_exec_sessions é uma vista ao alcance do servidor que mostra informações sobre todas as ligações de utilizadores ativas e tarefas internas. Esta informação inclui a versão do cliente, nome do programa do cliente, hora de login do cliente, utilizador de login, definição atual da sessão e mais. Use sys.dm_exec_sessions para primeiro visualizar a carga atual do sistema e identificar uma sessão de interesse, e depois aprender mais informações sobre essa sessão utilizando outras vistas de gestão dinâmica ou funções de gestão dinâmica.

As sys.dm_exec_connectionsvistas , sys.dm_exec_sessions, e sys.dm_exec_requests de gestão dinâmica mapeiam para a vista de compatibilidade do sistema sys.sysprocesses , que está obsoleta.

Observação

Para chamar esta vista do Azure Synapse Analytics (apenas pool SQL dedicado) ou do Analytics Platform System (PDW), veja sys.dm_pdw_nodes_exec_sessions. Use sys.dm_exec_sessions para Azure Synapse Analytics (apenas pool SQL serverless) ou Microsoft Fabric.

Nome da coluna Tipo de dados Anulável Description
session_id smallint Não Identifica a sessão associada a cada conexão primária ativa.
login_time datetime Não Hora em que a sessão foi estabelecida. As sessões que ainda não iniciaram sessão completamente no momento em que este DMV é consultado são apresentadas com um tempo de login de 1900-01-01.
host_name nvarchar(128) Yes Nome da estação de trabalho cliente específica para uma sessão. O valor é NULL para sessões internas.

Nota de segurança: A aplicação cliente fornece o nome da estação de trabalho e pode fornecer dados imprecisos. Não confie nisso HOST_NAME como uma característica de segurança.
program_name nvarchar(128) Yes Nome do programa cliente que iniciou a sessão. O valor é NULL para sessões internas.
host_process_id int Yes ID do processo do programa cliente que iniciou a sessão. O valor é NULL para sessões internas.
client_version int Yes Versão do protocolo TDS da interface usada pelo cliente para se ligar ao servidor. O valor é NULL para sessões internas.
client_interface_name nvarchar(32) Yes Nome da biblioteca/driver que está sendo usado pelo cliente para se comunicar com o servidor. O valor é NULL para sessões internas.
security_id Varbinário(85) Não ID de segurança do Windows associado ao login.
login_name nvarchar(128) Não Nome de logon do SQL Server sob o qual a sessão está sendo executada no momento. Para o nome de login original que criou a sessão, veja original_login_name. Pode ser um nome de login autenticado SQL Server ou um nome de utilizador de domínio autenticado por Windows.
nt_domain nvarchar(128) Yes Domínio Windows para o cliente se a sessão estiver a usar Autenticação Windows ou uma ligação de confiança. Este valor é NULL para sessões internas e utilizadores não pertencentes ao domínio.
nt_user_name nvarchar(128) Yes Nome de utilizador do Windows para o cliente se a sessão estiver a usar Autenticação Windows ou uma ligação de confiança. Este valor é NULL para sessões internas e utilizadores não pertencentes ao domínio.
status nvarchar(30) Não Estado da sessão. Valores possíveis:

Running - Atualmente a executar um ou mais pedidos
Sleeping - Atualmente sem pedidos a correr
Dormant - A sessão foi reiniciada devido ao pooling de ligação e agora está em estado pré-login.
Preconnect - A sessão está no classificador Governador de Recursos.
context_info Varbinário(128) Yes CONTEXT_INFO valor para a sessão. A informação de contexto é definida pelo utilizador usando a instrução SET CONTEXT_INFO .
cpu_time int Não Tempo de CPU, em milissegundos, utilizado por esta sessão.
memory_usage int Não Número de páginas de 8 KB de memória utilizadas por esta sessão.
total_scheduled_time int Não Tempo total, em milissegundos, para o qual a sessão (pedidos internos) estava agendada para execução.
total_elapsed_time int Não Tempo, em milissegundos, desde que a sessão foi estabelecida.
endpoint_id int Não ID do endpoint associado à sessão.
last_request_start_time datetime Não Hora em que começou o último pedido da sessão. Este tempo inclui o pedido atualmente em execução.
last_request_end_time datetime Yes Hora da última conclusão de um pedido na sessão.
reads bigint Não Número de leituras físicas realizadas, a pedido nesta sessão, durante esta sessão.
writes 1 bigint Não Número de escritas físicas realizadas, a pedido nesta sessão, durante esta sessão.
logical_reads bigint Não Número de leituras lógicas realizadas, por pedidos nesta sessão, durante esta sessão.
is_user_process bit Não 0 se a sessão for uma sessão do sistema. Caso contrário, é 1.
text_size int Não TEXTSIZE configuração para a sessão.
language nvarchar(128) Yes LANGUAGE configuração para a sessão.
date_format Nvarchar(3) Yes DATEFORMAT configuração para a sessão.
date_first smallint Não DATEFIRST configuração para a sessão.
quoted_identifier bit Não QUOTED_IDENTIFIER configuração para a sessão.
arithabort bit Não ARITHABORT configuração para a sessão.
ansi_null_dflt_on bit Não ANSI_NULL_DFLT_ON configuração para a sessão.
ansi_defaults bit Não ANSI_DEFAULTS configuração para a sessão.
ansi_warnings bit Não ANSI_WARNINGS configuração para a sessão.
ansi_padding bit Não ANSI_PADDING configuração para a sessão.
ansi_nulls bit Não ANSI_NULLS configuração para a sessão.
concat_null_yields_null bit Não CONCAT_NULL_YIELDS_NULL configuração para a sessão.
transaction_isolation_level smallint Não Nível de isolamento da transação da sessão.

0 = Unspecified
1 = ReadUncommitted
2 = ReadCommitted
3 = RepeatableRead
4 = Serializable
5 = Snapshot
lock_timeout int Não LOCK_TIMEOUT configuração para a sessão. O valor é em milissegundos.
deadlock_priority int Não DEADLOCK_PRIORITY configuração para a sessão.
row_count bigint Não O número de carreiras retornado na sessão até este ponto.
prev_error int Não ID do último erro retornado na sessão.
original_security_id Varbinário(85) Não ID de segurança do Windows associado ao original_login_namearquivo .
original_login_name nvarchar(128) Não Nome de login SQL Server que o cliente usou para criar esta sessão. Pode ser um nome de login autenticado SQL Server, um nome de utilizador de domínio autenticado no Windows ou um utilizador de base de dados contido. A sessão pode ter passado por muitas trocas de contexto implícitas ou explícitas após a ligação inicial, por exemplo, se for usado EXECUTE AS.
last_successful_logon datetime Yes Hora do último login bem-sucedido antes original_login_name do início da sessão atual.
last_unsuccessful_logon datetime Yes Hora da última tentativa de login falhada antes original_login_name do início da sessão atual.
unsuccessful_logons bigint Yes Número de tentativas de login malsucedidas para o original_login_name entre o last_successful_logon e login_time.
group_id int Não ID do grupo de carga de trabalho ao qual esta sessão pertence.
database_id smallint Não ID do banco de dados atual para cada sessão.

No Banco de Dados SQL do Azure, os valores são exclusivos em um único banco de dados ou pool elástico, mas não em um servidor lógico.

Aplica-se a: SQL Server 2012 (11.x) e versões posteriores.
authenticating_database_id int Yes ID do banco de dados que autentica a entidade de segurança. Para logins, o valor é 0. Para usuários de banco de dados contido, o valor é a ID do banco de dados contido.

Aplica-se a: SQL Server 2012 (11.x) e versões posteriores.
open_transaction_count int Não Número de transações abertas por sessão.

Aplica-se a: SQL Server 2012 (11.x) e versões posteriores.
pdw_node_id int Não O identificador do nó em que esta distribuição se encontra.

Aplica-se a: Azure Synapse Analytics e Analytics Platform System (PDW).
page_server_reads bigint Não Número de leituras do servidor de páginas realizadas, por pedidos nesta sessão, durante esta reunião.

Aplica-se a: Hiperescala do Banco de Dados SQL do Azure.
contained_availability_group_id uniqueidentifier Yes ID do grupo de disponibilidade contido.

Aplica-se a: SQL Server 2025 (17.x) e versões posteriores.

1 Especifica quando uma página está marcada como suja no pool de buffer. Este valor não equivale diretamente a escritas reais, porque a mesma página pode ser marcada mais do que uma vez. Estes contadores são agregados no final do lote.

Permissions

Cada um pode ver a sua própria informação de sessão.

No SQL Server 2019 (15.x) e versões anteriores, é necessário VIEW SERVER STATE ver todas as sessões no servidor. No SQL Server 2022 (16.x) e versões posteriores, requer VIEW SERVER PERFORMANCE STATE permissão no servidor.

Na base de dados SQL, é necessário VIEW DATABASE STATE ver todas as ligações à base de dados atual. VIEW DATABASE STATE Não pode ser concedido na master base de dados.

Observações

Quando a common criteria compliance enabled opção de configuração do servidor está ativada, as estatísticas de login são exibidas nas colunas seguintes.

  • last_successful_logon
  • last_unsuccessful_logon
  • unsuccessful_logons

Se esta opção não estiver ativada, estas colunas devolvem valores nulos. Para mais informações sobre como definir esta opção de configuração de servidor, consulte Ativar configuração de conformidade com critérios comuns.

As ligações administrativas na Azure SQL Database veem uma linha por sessão autenticada. As sa sessões que aparecem no conjunto de resultados não têm qualquer efeito na quota de utilizadores para sessões. As ligações não administrativas só veem informações relacionadas com as suas sessões de utilizador na base de dados.

Por causa das diferenças na forma como são gravadas, open_transaction_count pode não coincidirsys.dm_tran_session_transactions...open_transaction_count

Cardinalidades de relacionamento

De Para On/Apply Relacionamento
sys.dm_exec_sessions sys.dm_exec_requests session_id Um para zero ou um para muitos
sys.dm_exec_sessions sys.dm_exec_connections session_id Um para zero ou um para muitos
sys.dm_exec_sessions sys.dm_tran_session_transactions session_id Um para zero ou um para muitos
sys.dm_exec_sessions sys.dm_exec_cursors (session_id | 0) session_id CROSS APPLY
OUTER APPLY
Um para zero ou um para muitos
sys.dm_exec_sessions sys.dm_db_session_space_usage session_id One-to-one

Examples

A. Encontre utilizadores que estejam ligados ao servidor

O exemplo seguinte encontra os utilizadores que estão ligados ao servidor e devolve o número de sessões para cada utilizador.

SELECT login_name,
       COUNT(session_id) AS session_count
FROM sys.dm_exec_sessions
GROUP BY login_name;

B. Encontre cursores de longa duração

O exemplo seguinte mostra os cursores que estiveram abertos por mais do que um período específico, quem os criou e em que sessão se encontram.

USE master;
GO

SELECT creation_time,
       cursor_id,
       name,
       c.session_id,
       login_name
FROM sys.dm_exec_cursors(0) AS c
     INNER JOIN sys.dm_exec_sessions AS s
         ON c.session_id = s.session_id
WHERE DATEDIFF(mi, c.creation_time, GETDATE()) > 5;

C. Encontre sessões inativas que tenham transações em aberto

O exemplo seguinte encontra sessões que têm transações abertas e estão inativas. Uma sessão inativa é aquela em que não há nenhum pedido a correr atualmente.

SELECT s.*
FROM sys.dm_exec_sessions AS s
WHERE EXISTS (SELECT *
              FROM sys.dm_tran_session_transactions AS t
              WHERE t.session_id = s.session_id)
      AND NOT EXISTS (SELECT *
                      FROM sys.dm_exec_requests AS r
                      WHERE r.session_id = s.session_id);

D. Encontre informações sobre a própria ligação de uma consulta

O exemplo seguinte recolhe informações sobre a própria ligação de uma consulta:

SELECT c.session_id,
       c.net_transport,
       c.encrypt_option,
       c.auth_scheme,
       s.host_name,
       s.program_name,
       s.client_interface_name,
       s.login_name,
       s.nt_domain,
       s.nt_user_name,
       s.original_login_name,
       c.connect_time,
       s.login_time
FROM sys.dm_exec_connections AS c
     INNER JOIN sys.dm_exec_sessions AS s
         ON c.session_id = s.session_id
WHERE c.session_id = @@SPID;