Condividi tramite


sys.dm_exec_sessions (Transact-SQL)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsPiattaforma di analisi (PDW)Endpoint di analisi SQL in Microsoft FabricMagazzino in Microsoft FabricDatabase SQL in Microsoft Fabric

Restituisce una riga per sessione autenticata in SQL Server. sys.dm_exec_sessions è una visualizzazione dell'ambito server che mostra informazioni su tutte le connessioni utente attive e le attività interne. Tali informazioni includono la versione del client, il nome del programma client, l'ora di accesso del client, l'utente che esegue l'accesso, l'impostazione di sessione corrente e altro. Usare sys.dm_exec_sessions per visualizzare prima il carico di sistema corrente e per identificare una sessione di interesse e quindi ottenere altre informazioni su tale sessione usando altre viste a gestione dinamica o funzioni di gestione dinamica.

Le sys.dm_exec_connectionsviste a gestione dinamica , sys.dm_exec_sessionse e sys.dm_exec_requests vengono mappate alla vista di compatibilità del sistema sys.sysprocesses deprecata.

Nota

Per chiamare questa vista da Azure Synapse Analytics (solo pool SQL dedicato) o Analytics Platform System (PDW), vedi sys.dm_pdw_nodes_exec_sessions. Usa sys.dm_exec_sessions per Azure Synapse Analytics (solo server less SQL pool) o Microsoft Fabric.

Nome colonna Tipo di dati Annulabile Description
session_id smallint NO Identifica la sessione associata a ogni connessione principale attiva.
login_time datetime NO Data e ora in cui è stata stabilita la sessione. Le sessioni che non hanno eseguito completamente l'accesso al momento della query su questa DMV vengono visualizzate con un'ora di accesso di 1900-01-01.
host_name nvarchar(128) Yes Nome della postazione di lavoro client specifica per una sessione. Il valore è NULL relativo alle sessioni interne.

Nota di sicurezza: l'applicazione client fornisce il nome della workstation e può fornire dati non accurati. Non basarsi su HOST_NAME come funzionalità di sicurezza.
program_name nvarchar(128) Yes Nome del programma client che ha iniziato la sessione. Il valore è NULL relativo alle sessioni interne.
host_process_id int Yes ID di processo del programma client che ha iniziato la sessione. Il valore è NULL relativo alle sessioni interne.
client_version int Yes Versione del protocollo TDS dell'interfaccia utilizzata dal client per connettersi al server. Il valore è NULL relativo alle sessioni interne.
client_interface_name nvarchar(32) Yes Nome della libreria/driver utilizzato dal client per comunicare con il server. Il valore è NULL relativo alle sessioni interne.
security_id varbinary(85) NO ID di sicurezza di Windows associato all'account di accesso.
login_name nvarchar(128) NO Nome dell'account di accesso SQL Server con cui la sessione è attualmente in esecuzione. Per il nome di accesso originale che ha creato la sessione, vedere original_login_name. Può essere un nome di accesso autenticato di SQL Server o un nome utente di dominio autenticato di Windows.
nt_domain nvarchar(128) Yes Dominio di Windows per il client se la sessione utilizza l'autenticazione di Windows o una connessione trusted. Questo valore è NULL per le sessioni interne e gli utenti non di dominio.
nt_user_name nvarchar(128) Yes Nome utente di Windows per il client se la sessione utilizza l'autenticazione di Windows o una connessione trusted. Questo valore è NULL per le sessioni interne e gli utenti non di dominio.
status nvarchar(30) NO Stato della sessione. Valori possibili:

Running - Attualmente in esecuzione una o più richieste
Sleeping - Attualmente non è in esecuzione alcuna richiesta
Dormant - La sessione è stata reimpostata a causa del pool di connessioni ed è ora in stato di prelogin.
Preconnect - La sessione si trova nel classificatore di Resource Governor.
context_info varbinary(128) Yes CONTEXT_INFO valore per la sessione. Le informazioni sul contesto sono impostate dall'utente tramite l'istruzione SET CONTEXT_INFO .
cpu_time int NO Tempo CPU, in millisecondi, usato da questa sessione.
memory_usage int NO Numero di pagine da 8 KB utilizzate dalla sessione.
total_scheduled_time int NO Tempo totale, espresso in millisecondi, pianificato per l'esecuzione delle richieste nella sessione.
total_elapsed_time int NO Tempo, espresso in millisecondi, trascorso dal momento in cui è stata stabilita la sessione.
endpoint_id int NO ID dell'endpoint associato alla sessione.
last_request_start_time datetime NO Data e ora in cui è iniziata l'ultima richiesta nella sessione. Questa volta include la richiesta attualmente in esecuzione.
last_request_end_time datetime Yes Data e ora dell'ultimo completamento di una richiesta nella sessione.
reads bigint NO Numero di letture fisiche effettuate, su richiesta in questa sessione, durante questa sessione.
writes 1 bigint NO Numero di scritture fisiche effettuate, su richiesta in questa sessione, durante questa sessione.
logical_reads bigint NO Numero di letture logiche eseguite, da richieste in questa sessione, durante questa sessione.
is_user_process bit NO 0 se la sessione è una sessione di sistema. In caso contrario, è 1.
text_size int NO TEXTSIZE impostazione per la sessione.
language nvarchar(128) Yes LANGUAGE impostazione per la sessione.
date_format nvarchar(3) Yes DATEFORMAT impostazione per la sessione.
date_first smallint NO DATEFIRST impostazione per la sessione.
quoted_identifier bit NO QUOTED_IDENTIFIER impostazione per la sessione.
arithabort bit NO ARITHABORT impostazione per la sessione.
ansi_null_dflt_on bit NO ANSI_NULL_DFLT_ON impostazione per la sessione.
ansi_defaults bit NO ANSI_DEFAULTS impostazione per la sessione.
ansi_warnings bit NO ANSI_WARNINGS impostazione per la sessione.
ansi_padding bit NO ANSI_PADDING impostazione per la sessione.
ansi_nulls bit NO ANSI_NULLS impostazione per la sessione.
concat_null_yields_null bit NO CONCAT_NULL_YIELDS_NULL impostazione per la sessione.
transaction_isolation_level smallint NO Livello di isolamento delle transazioni della sessione.

0 = Unspecified
1 = ReadUncommitted
2 = ReadCommitted
3 = RepeatableRead
4 = Serializable
5 = Snapshot
lock_timeout int NO LOCK_TIMEOUT impostazione per la sessione. Il valore è espresso in millisecondi.
deadlock_priority int NO DEADLOCK_PRIORITY impostazione per la sessione.
row_count bigint NO Numero di righe restituite nella sessione fino a questo punto.
prev_error int NO ID dell'ultimo errore restituito nella sessione.
original_security_id varbinary(85) NO ID di sicurezza di Windows associato a original_login_name.
original_login_name nvarchar(128) NO Nome di accesso di SQL Server usato dal client per creare questa sessione. Può essere un nome di accesso autenticato di SQL Server, un nome utente di dominio autenticato di Windows o un utente di database indipendente. La sessione potrebbe essere stata effettuata attraverso molti cambiamenti di contesto impliciti o espliciti dopo la connessione iniziale, ad esempio, se si utilizza EXECUTE AS.
last_successful_logon datetime Yes Ora dell'ultimo accesso riuscito per prima original_login_name dell'avvio della sessione corrente.
last_unsuccessful_logon datetime Yes Ora dell'ultimo tentativo di accesso non riuscito per prima dell'avvio original_login_name della sessione corrente.
unsuccessful_logons bigint Yes Numero di tentativi di accesso non riusciti per l'oggetto original_login_namelast_successful_logon tra e login_time.
group_id int NO ID del gruppo di carico di lavoro a cui appartiene la sessione.
database_id smallint NO ID del database corrente per ogni sessione.

In database SQL di Azure i valori sono univoci all'interno di un database singolo o di un pool elastico, ma non all'interno di un server logico.

Si applica a: SQL Server 2012 (11.x) e versioni successive.
authenticating_database_id int Yes ID del database che ha eseguito l'autenticazione dell'entità. Per gli account di accesso, il valore è 0. Per gli utenti del database indipendente, il valore è l'ID del database indipendente.

Si applica a: SQL Server 2012 (11.x) e versioni successive.
open_transaction_count int NO Numero di transazioni aperte per sessione.

Si applica a: SQL Server 2012 (11.x) e versioni successive.
pdw_node_id int NO Identificatore del nodo in cui è attiva la distribuzione.

Si applica a: Azure Synapse Analytics e piattaforma di analisi (PDW).
page_server_reads bigint NO Numero di letture del server di pagine eseguite, da richieste in questa sessione, durante questa sessione.

Si applica a: database SQL di Azure Hyperscale.
contained_availability_group_id uniqueidentifier Yes ID del gruppo di disponibilità contenuto.

Si applica a: SQL Server 2025 (17.x) e versioni successive.

1 Specifica quando una pagina è contrassegnata come sporca nel pool di buffer. Questo valore non equivale direttamente alle scritture effettive, perché la stessa pagina può essere contrassegnata più di una volta. Questi contatori sono aggregati alla fine del lotto.

Autorizzazioni

Tutti possono visualizzare le proprie informazioni sulla sessione.

In SQL Server 2019 (15.x) e versioni precedenti è necessario VIEW SERVER STATE visualizzare tutte le sessioni nel server. In SQL Server 2022 (16.x) e versioni successive è richiesta VIEW SERVER PERFORMANCE STATE l'autorizzazione per il server.

In database SQL, richiede VIEW DATABASE STATE di visualizzare tutte le connessioni al database corrente. VIEW DATABASE STATE non può essere concesso nel master database.

Osservazioni:

Quando l'opzione di configurazione del common criteria compliance enabled server è abilitata, le statistiche di accesso vengono visualizzate nelle colonne seguenti.

  • last_successful_logon
  • last_unsuccessful_logon
  • unsuccessful_logons

Se questa opzione non è abilitata, queste colonne restituiscono valori Null. Per maggiori informazioni su come impostare questa opzione di configurazione del server, vedi Abilita la configurazione di conformità ai criteri comuni.

Le connessioni di amministratore in database SQL di Azure vedere una riga per ogni sessione autenticata. Le sa sessioni visualizzate nel set di risultati non hanno alcun effetto sulla quota utente per le sessioni. Le connessioni non amministrative visualizzano solo informazioni correlate alle sessioni utente del database.

A causa delle differenze nel modo in cui vengono registrate, open_transaction_count potrebbe non corrispondere a sys.dm_tran_session_transactions.open_transaction_count.

Cardinalità delle relazioni

Da Per In/Si applica a Relazione
sys.dm_exec_sessions sys.dm_exec_requests session_id Uno-a-zero o uno-a-molti
sys.dm_exec_sessions sys.dm_exec_connections session_id Uno-a-zero o uno-a-molti
sys.dm_exec_sessions sys.dm_tran_session_transactions session_id Uno-a-zero o uno-a-molti
sys.dm_exec_sessions sys.dm_exec_cursors (session_id | 0) session_id CROSS APPLY
OUTER APPLY
Uno-a-zero o uno-a-molti
sys.dm_exec_sessions sys.dm_db_session_space_usage session_id Uno-a-uno

Esempi

R. Trovare gli utenti connessi al server

Nell'esempio seguente vengono individuati gli utenti connessi al server e viene restituito il numero di sessioni per ogni utente.

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

B. Trovare cursori a esecuzione prolungata

Nell'esempio seguente vengono trovati i cursori aperti per più di un periodo di tempo specifico, chi ha creato i cursori e la sessione in cui si trovano i cursori.

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. Trovare sessioni inattive con transazioni aperte

Nell'esempio seguente vengono individuate le sessioni inattive con transazioni aperte. Si definisce inattiva una sessione per cui non sono in esecuzione richieste.

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. Trovare informazioni sulla connessione di una query

L'esempio seguente raccoglie informazioni sulla connessione di una query:

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;