Delen via


sys.dm_exec_sessions (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft FabricSQL-database in Microsoft Fabric

Geeft één rij terug per geauthenticeerde sessie op SQL Server. sys.dm_exec_sessions is een server-scope view die informatie toont over alle actieve gebruikersverbindingen en interne taken. Deze informatie omvat de clientversie, de naam van het clientprogramma, de inlogtijd van de client, de inloggebruikers, de huidige sessie-instelling en meer. Gebruik sys.dm_exec_sessions om eerst de huidige systeembelasting te bekijken en een sessie van interesse te identificeren, en vervolgens meer informatie over die sessie te leren door gebruik te maken van andere dynamische beheerweergaven of dynamische beheerfuncties.

De sys.dm_exec_connections, sys.dm_exec_sessions, en sys.dm_exec_requests dynamische beheerweergaven worden gekoppeld aan de verouderde sys.sysprocesses systeemcompatibiliteitsweergave.

Opmerking

Om deze weergave aan te roepen vanuit Azure Synapse Analytics (alleen dedicated SQL pool) of Analytics Platform System (PDW), zie sys.dm_pdw_nodes_exec_sessions. Gebruik sys.dm_exec_sessions voor Azure Synapse Analytics (alleen serverless SQL pool) of Microsoft Fabric.

Kolomnaam Gegevenstype Nullbaar Description
session_id smallint Nee. Identificeert de sessie die is gekoppeld aan elke actieve primaire verbinding.
login_time datetime Nee. Tijdstip waarop de sessie tot stand is gebracht. Sessies die niet volledig zijn ingelogd op het moment dat deze DMV wordt geraadpleegd, worden getoond met een inlogtijd van 1900-01-01.
host_name nvarchar(128) Yes De naam van het clientwerkstation dat specifiek is voor een sessie. De waarde is NULL voor interne sessies.

Beveiligingsnotitie: De clientapplicatie geeft de naam van het werkstation en kan onnauwkeurige gegevens leveren. Vertrouw er niet op HOST_NAME als beveiligingsfunctie.
program_name nvarchar(128) Yes Naam van het clientprogramma dat de sessie heeft gestart. De waarde is NULL voor interne sessies.
host_process_id int Yes Proces-ID van het clientprogramma dat de sessie heeft gestart. De waarde is NULL voor interne sessies.
client_version int Yes TDS-protocolversie van de interface die door de client wordt gebruikt om verbinding te maken met de server. De waarde is NULL voor interne sessies.
client_interface_name nvarchar(32) Yes Naam van bibliotheek/stuurprogramma dat door de client wordt gebruikt om met de server te communiceren. De waarde is NULL voor interne sessies.
security_id varbinary(85) Nee. Windows Security ID gekoppeld aan de login.
login_name nvarchar(128) Nee. Sql Server-aanmeldingsnaam waaronder de sessie momenteel wordt uitgevoerd. Voor de oorspronkelijke inlognaam die de sessie heeft aangemaakt, zie original_login_name. Kan een SQL Server-geauthenticeerde loginnaam zijn of een Windows-geauthenticeerde domeingebruikersnaam.
nt_domain nvarchar(128) Yes Windows-domein voor de client als de sessie gebruikmaakt van Windows-authenticatie of een vertrouwde verbinding. Deze waarde is NULL bedoeld voor interne sessies en niet-domeingebruikers.
nt_user_name nvarchar(128) Yes Windows-gebruikersnaam voor de client als de sessie Windows-authenticatie of een vertrouwde verbinding gebruikt. Deze waarde is NULL bedoeld voor interne sessies en niet-domeingebruikers.
status nvarchar(30) Nee. Status van de sessie. Mogelijke waarden:

Running - Momenteel één of meer verzoeken uitvoeren
Sleeping - Momenteel geen verzoeken draaien
Dormant - De sessie is gereset vanwege verbindingspooling en bevindt zich nu in prelogin-status.
Preconnect - Sessie is in de Resource Governor-classifier.
context_info varbinary(128) Yes CONTEXT_INFO waarde voor de sessie. De contextinformatie wordt door de gebruiker ingesteld met behulp van de SET CONTEXT_INFO-instructie .
cpu_time int Nee. CPU-tijd, in milliseconden, gebruikt door deze sessie.
memory_usage int Nee. Aantal 8-KB pagina's geheugen dat door deze sessie wordt gebruikt.
total_scheduled_time int Nee. Totale tijd, in milliseconden, waarvoor de sessie (verzoeken binnen) waren gepland voor uitvoering.
total_elapsed_time int Nee. Tijd, in milliseconden, sinds de sessie werd ingesteld.
endpoint_id int Nee. ID van het eindpunt dat aan de sessie is gekoppeld.
last_request_start_time datetime Nee. Tijd waarop het laatste verzoek van de sessie begon. Deze keer omvat het momenteel uitgevoerde verzoek.
last_request_end_time datetime Yes Tijd van de laatste voltooiing van een aanvraag voor de sessie.
reads bigint Nee. Aantal fysieke lezingen uitgevoerd, op verzoek in deze sessie, tijdens deze sessie.
writes 1 bigint Nee. Aantal fysieke schrijfopdrachten uitgevoerd, op verzoek in deze sessie, tijdens deze sessie.
logical_reads bigint Nee. Aantal logische reads uitgevoerd door verzoeken in deze sessie, tijdens deze sessie.
is_user_process bit Nee. 0 als de sessie een systeemsessie is. Anders is het 1.
text_size int Nee. TEXTSIZE instelling voor de sessie.
language nvarchar(128) Yes LANGUAGE instelling voor de sessie.
date_format nvarchar(3) Yes DATEFORMAT instelling voor de sessie.
date_first smallint Nee. DATEFIRST instelling voor de sessie.
quoted_identifier bit Nee. QUOTED_IDENTIFIER instelling voor de sessie.
arithabort bit Nee. ARITHABORT instelling voor de sessie.
ansi_null_dflt_on bit Nee. ANSI_NULL_DFLT_ON instelling voor de sessie.
ansi_defaults bit Nee. ANSI_DEFAULTS instelling voor de sessie.
ansi_warnings bit Nee. ANSI_WARNINGS instelling voor de sessie.
ansi_padding bit Nee. ANSI_PADDING instelling voor de sessie.
ansi_nulls bit Nee. ANSI_NULLS instelling voor de sessie.
concat_null_yields_null bit Nee. CONCAT_NULL_YIELDS_NULL instelling voor de sessie.
transaction_isolation_level smallint Nee. Niveau van transactieisolatie van de sessie.

0 = Unspecified
1 = ReadUncommitted
2 = ReadCommitted
3 = RepeatableRead
4 = Serializable
5 = Snapshot
lock_timeout int Nee. LOCK_TIMEOUT instelling voor de sessie. De waarde is in milliseconden.
deadlock_priority int Nee. DEADLOCK_PRIORITY instelling voor de sessie.
row_count bigint Nee. Het aantal rijen kwam tot dat moment terug in de sessie.
prev_error int Nee. Id van de laatste fout die tijdens de sessie is geretourneerd.
original_security_id varbinary(85) Nee. Windows security ID die gekoppeld is aan de original_login_name.
original_login_name nvarchar(128) Nee. De SQL Server-inlognaam die de client gebruikte om deze sessie aan te maken. Kan een geauthenticeerde inlognaam van een SQL Server zijn, een Windows-geauthenticeerde domeingebruikersnaam, of een gebruiker van een gesloten database. De sessie kan na de initiële verbinding door veel impliciete of expliciete contextwisselingen zijn gegaan, bijvoorbeeld als EXECUTE AS wordt gebruikt.
last_successful_logon datetime Yes Tijd van de laatste succesvolle logon voordat original_login_name de huidige sessie begon.
last_unsuccessful_logon datetime Yes Tijd van de laatste mislukte inlogpoging voordat original_login_name de huidige sessie begon.
unsuccessful_logons bigint Yes Aantal mislukte inlogpogingen voor de original_login_name tussen de last_successful_logon en login_time.
group_id int Nee. Id van de workloadgroep waartoe deze sessie behoort.
database_id smallint Nee. Id van de huidige database voor elke sessie.

In Azure SQL Database zijn de waarden uniek binnen één database of een elastische pool, maar niet binnen een logische server.

Van toepassing op: SQL Server 2012 (11.x) en latere versies.
authenticating_database_id int Yes Id van de database die de principal authenticeert. Voor aanmeldingen is 0de waarde . Voor ingesloten databasegebruikers is de waarde de database-id van de ingesloten database.

Van toepassing op: SQL Server 2012 (11.x) en latere versies.
open_transaction_count int Nee. Aantal openstaande transacties per sessie.

Van toepassing op: SQL Server 2012 (11.x) en latere versies.
pdw_node_id int Nee. De id voor het knooppunt waarop deze distributie zich bevindt.

Van toepassing op: Azure Synapse Analytics en Analytics Platform System (PDW).
page_server_reads bigint Nee. Aantal pagina-serverlezingen uitgevoerd door verzoeken in deze sessie tijdens deze sessie.

Van toepassing op: Azure SQL Database Hyperscale.
contained_availability_group_id uniqueidentifier Yes ID van de contained availability group.

Van toepassing op: SQL Server 2025 (17.x) en latere versies.

1 Geeft aan wanneer een pagina als vuil wordt gemarkeerd in de bufferpool. Deze waarde staat niet direct gelijk aan daadwerkelijke schrijfopdrachten, omdat dezelfde pagina meer dan eens gemarkeerd kan worden. Deze tellers worden aan het einde van de batch geaggregeerd.

Permissions

Iedereen kan zijn eigen sessie-informatie zien.

In SQL Server 2019 (15.x) en eerdere versies is het vereist VIEW SERVER STATE dat alle sessies op de server worden gezien. Voor SQL Server 2022 (16.x) en latere versies is een machtiging op de server vereist VIEW SERVER PERFORMANCE STATE .

In SQL Database moet VIEW DATABASE STATE je alle verbindingen naar de huidige database zien. VIEW DATABASE STATE Kan niet worden toegekend in de master database.

Opmerkingen

Wanneer de common criteria compliance enabled serverconfiguratieoptie is ingeschakeld, worden de logonstatistieken weergegeven in de volgende kolommen.

  • last_successful_logon
  • last_unsuccessful_logon
  • unsuccessful_logons

Als deze optie niet is ingeschakeld, geven deze kolommen nullwaarden terug. Voor meer informatie over hoe je deze serverconfiguratieoptie kunt instellen, zie Configuratie van naleving van gemeenschappelijke criteria inschakelen.

De beheerdersverbindingen in Azure SQL Database zien één rij per geauthenticeerde sessie. De sa sessies die in de resultaatset verschijnen, hebben geen invloed op de gebruikersquota voor sessies. De niet-beheerdersverbindingen zien alleen informatie die gerelateerd is aan hun databasegebruikerssessies.

Door verschillen in hoe ze worden opgenomen, open_transaction_count kunnen ze misschien niet overeenkomen sys.dm_tran_session_transactions.open_transaction_count.

Relatiekardinaliteiten

Van Tot Op/Aanvullen Relatie
sys.dm_exec_sessions sys.dm_exec_requests session_id Eén op nul of één op veel
sys.dm_exec_sessions sys.dm_exec_connections session_id Eén op nul of één op veel
sys.dm_exec_sessions sys.dm_tran_session_transactions session_id Eén op nul of één op veel
sys.dm_exec_sessions sys.dm_exec_cursors (session_id | 0) session_id CROSS APPLY
OUTER APPLY
Eén op nul of één op veel
sys.dm_exec_sessions sys.dm_db_session_space_usage session_id One-to-one

Voorbeelden

Eén. Zoek gebruikers die verbonden zijn met de server

Het volgende voorbeeld vindt de gebruikers die verbonden zijn met de server en geeft het aantal sessies voor elke gebruiker terug.

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

B. Vind langlopende cursors

Het volgende voorbeeld toont de cursors die langer dan een specifieke tijd open waren, wie de cursors heeft gemaakt en in welke sessie de cursors zich bevinden.

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. Zoek idle sessies met open transacties

Het volgende voorbeeld vindt sessies met open transacties en die inactief zijn. Een idle-sessie is er een waarbij momenteel geen verzoek draait.

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. Vind informatie over de eigen verbinding van een zoekopdracht

Het volgende voorbeeld verzamelt informatie over de eigen verbinding van een 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;