sys.dm_exec_sessions (Transact-SQL)

Aplica-se a: SQL ServerBase de Dados SQL do AzureAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics endpoint em Microsoft FabricWarehouse em Microsoft FabricSQL database em 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.

Note

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 Descrição
session_id smallint No Identifica a sessão associada a cada conexão primária ativa.
login_time datetime No 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 varbinary(85) No ID de segurança do Windows associado ao login.
login_name nvarchar(128) No 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) No 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 varbinary(128) Yes CONTEXT_INFO valor para a sessão. A informação de contexto é definida pelo utilizador usando a SET CONTEXT_INFO instrução.
cpu_time int No Tempo de CPU, em milissegundos, utilizado por esta sessão.
memory_usage int No Número de páginas de 8 KB de memória utilizadas por esta sessão.
total_scheduled_time int No Tempo total, em milissegundos, para o qual a sessão (pedidos internos) estava agendada para execução.
total_elapsed_time int No Tempo, em milissegundos, desde que a sessão foi estabelecida.
endpoint_id int No ID do endpoint associado à sessão.
last_request_start_time datetime No 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 No Número de leituras físicas realizadas, a pedido nesta sessão, durante esta sessão.
writes 1 bigint No Número de escritas físicas realizadas, a pedido nesta sessão, durante esta sessão.
logical_reads bigint No Número de leituras lógicas realizadas, por pedidos nesta sessão, durante esta sessão.
is_user_process bit No 0 se a sessão for uma sessão do sistema. Caso contrário, é 1.
text_size int No 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 No DATEFIRST configuração para a sessão.
quoted_identifier bit No QUOTED_IDENTIFIER configuração para a sessão.
arithabort bit No ARITHABORT configuração para a sessão.
ansi_null_dflt_on bit No ANSI_NULL_DFLT_ON configuração para a sessão.
ansi_defaults bit No ANSI_DEFAULTS configuração para a sessão.
ansi_warnings bit No ANSI_WARNINGS configuração para a sessão.
ansi_padding bit No ANSI_PADDING configuração para a sessão.
ansi_nulls bit No ANSI_NULLS configuração para a sessão.
concat_null_yields_null bit No CONCAT_NULL_YIELDS_NULL configuração para a sessão.
transaction_isolation_level smallint No 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 No LOCK_TIMEOUT configuração para a sessão. O valor é em milissegundos.
deadlock_priority int No DEADLOCK_PRIORITY configuração para a sessão.
row_count bigint No O número de carreiras retornado na sessão até este ponto.
prev_error int No ID do último erro retornado na sessão.
original_security_id varbinary(85) No ID de segurança do Windows associado ao original_login_namearquivo .
original_login_name nvarchar(128) No 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 EXECUTE AS for utilizada.
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 No ID do grupo de carga de trabalho ao qual esta sessão pertence.
database_id smallint No 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 No 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 No 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 No 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 Base de Dados SQL do Azure 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 Relationship
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;