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 dit aan te roepen vanuit een dedicated SQL-pool in Azure Synapse Analytics of Analytics Platform System (PDW), zie sys.dm_pdw_nodes_exec_sessions. Gebruik voor serverless SQL pool of Microsoft Fabric sys.dm_exec_sessions.

Kolomnaam Gegevenstype Beschrijving en versiespecifieke informatie
session_id smallint Identificeert de sessie die is gekoppeld aan elke actieve primaire verbinding. Niet nullwaarde.
login_time datetime Tijdstip waarop de sessie tot stand is gebracht. Niet nullwaarde. 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) Naam van het clientwerkstation dat specifiek is voor een sessie. De waarde is NULL voor interne sessies. Nullable.

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) Naam van het clientprogramma dat de sessie heeft gestart. De waarde is NULL voor interne sessies. Nullable.
host_process_id int Proces-ID van het clientprogramma dat de sessie heeft gestart. De waarde is NULL voor interne sessies. Nullable.
client_version int 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. Nullable.
client_interface_name nvarchar(32) Naam van bibliotheek/stuurprogramma dat door de client wordt gebruikt om met de server te communiceren. De waarde is NULL voor interne sessies. Nullable.
security_id varbinary(85) Windows Security ID gekoppeld aan de login. Niet nullwaarde.
login_name nvarchar(128) 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. Niet nullwaarde.
nt_domain nvarchar(128) 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. Nullable.
nt_user_name nvarchar(128) 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. Nullable.
status nvarchar(30) 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.

Niet nullwaarde.
context_info varbinary(128) CONTEXT_INFO waarde voor de sessie. De contextinformatie wordt door de gebruiker ingesteld met behulp van de SET CONTEXT_INFO-instructie . Nullable.
cpu_time int CPU-tijd, in milliseconden, gebruikt door deze sessie. Niet nullwaarde.
memory_usage int Aantal 8-KB pagina's geheugen dat door deze sessie wordt gebruikt. Niet nullwaarde.
total_scheduled_time int Totale tijd, in milliseconden, waarvoor de sessie (verzoeken binnen) waren gepland voor uitvoering. Niet nullwaarde.
total_elapsed_time int Tijd, in milliseconden, sinds de sessie werd ingesteld. Niet nullwaarde.
endpoint_id int ID van het eindpunt dat aan de sessie is gekoppeld. Niet nullwaarde.
last_request_start_time datetime Tijd waarop het laatste verzoek van de sessie begon. Deze keer omvat het momenteel uitgevoerde verzoek. Niet nullwaarde.
last_request_end_time datetime Tijd van de laatste voltooiing van een aanvraag voor de sessie. Nullable.
reads bigint Aantal leesopdrachten uitgevoerd, op verzoek in deze sessie, tijdens deze sessie. Niet nullwaarde.
writes bigint Aantal schrijfopdrachten uitgevoerd op verzoek in deze sessie, tijdens deze sessie. Niet nullwaarde.
logical_reads bigint Aantal logische reads uitgevoerd door verzoeken in deze sessie, tijdens deze sessie. Niet nullwaarde.
is_user_process bit 0 als de sessie een systeemsessie is. Anders is het 1. Niet nullwaarde.
text_size int TEXTSIZE instelling voor de sessie. Niet nullwaarde.
language nvarchar(128) LANGUAGE instelling voor de sessie. Nullable.
date_format nvarchar(3) DATEFORMAT instelling voor de sessie. Nullable.
date_first smallint DATEFIRST instelling voor de sessie. Niet nullwaarde.
quoted_identifier bit QUOTED_IDENTIFIER instelling voor de sessie. Niet nullwaarde.
arithabort bit ARITHABORT instelling voor de sessie. Niet nullwaarde.
ansi_null_dflt_on bit ANSI_NULL_DFLT_ON instelling voor de sessie. Niet nullwaarde.
ansi_defaults bit ANSI_DEFAULTS instelling voor de sessie. Niet nullwaarde.
ansi_warnings bit ANSI_WARNINGS instelling voor de sessie. Niet nullwaarde.
ansi_padding bit ANSI_PADDING instelling voor de sessie. Niet nullwaarde.
ansi_nulls bit ANSI_NULLS instelling voor de sessie. Niet nullwaarde.
concat_null_yields_null bit CONCAT_NULL_YIELDS_NULL instelling voor de sessie. Niet nullwaarde.
transaction_isolation_level smallint Niveau van transactieisolatie van de sessie.

0 = Unspecified
1 = ReadUncommitted
2 = ReadCommitted
3 = RepeatableRead
4 = Serializable
5 = Snapshot

Niet nullwaarde.
lock_timeout int LOCK_TIMEOUT instelling voor de sessie. De waarde is in milliseconden. Niet nullwaarde.
deadlock_priority int DEADLOCK_PRIORITY instelling voor de sessie. Niet nullwaarde.
row_count bigint Het aantal rijen kwam tot dat moment terug in de sessie. Niet nullwaarde.
prev_error int Id van de laatste fout die tijdens de sessie is geretourneerd. Niet nullwaarde.
original_security_id varbinary(85) Windows security ID die gekoppeld is aan de original_login_name. Niet nullwaarde.
original_login_name nvarchar(128) 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 veel impliciete of expliciete contextwisselingen hebben doorgemaakt, bijvoorbeeld als EXECUTE AS wordt gebruikt. Niet nullwaarde.
last_successful_logon datetime Tijd van de laatste succesvolle logon voordat original_login_name de huidige sessie begon.
last_unsuccessful_logon datetime Tijd van de laatste mislukte inlogpoging voordat original_login_name de huidige sessie begon.
unsuccessful_logons bigint Aantal mislukte inlogpogingen voor de original_login_name tussen de last_successful_logon en login_time.
group_id int Id van de workloadgroep waartoe deze sessie behoort. Niet nullwaarde.
database_id smallint 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 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 Aantal openstaande transacties per sessie.

Van toepassing op: SQL Server 2012 (11.x) en latere versies.
pdw_node_id int 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 Aantal pagina-serverlezingen uitgevoerd door verzoeken in deze sessie tijdens deze sessie. Niet nullwaarde.

Van toepassing op: Azure SQL Database Hyperscale.

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 Server configuration: common criteria compliance enabled.

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;
GO

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;