Udostępnij za pomocą


sys.dm_exec_sessions (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punkt końcowy analizy SQL w usłudze Microsoft FabricHurtownia danych w usłudze Microsoft FabricBaza danych SQL w usłudze Microsoft Fabric

Zwraca jeden wiersz na każdą uwierzytelnioną sesję na SQL Server. sys.dm_exec_sessions to widok w zakresie serwera, który pokazuje informacje o wszystkich aktywnych połączeniach użytkowników i zadaniach wewnętrznych. Informacje te obejmują wersję klienta, nazwę programu, czas logowania klienta, użytkownika logowania, aktualne ustawienie sesji i inne. Najpierw użyj sys.dm_exec_sessions do zobaczenia aktualnego obciążenia systemu i zidentyfikowania interesującej sesji, a następnie do poznania informacji o tej sesji, korzystając z innych dynamicznych widoków zarządzania lub funkcji dynamicznego zarządzania.

Widoki sys.dm_exec_connectionszarządzania , sys.dm_exec_sessions, oraz sys.dm_exec_requests dynamiczne mapują się na przestarzały widok zgodności systemu sys.sysprocesses .

Uwaga / Notatka

Aby wywołać to z dedykowanej puli SQL w Azure Synapse Analytics lub Analytics Platform System (PDW), zobacz sys.dm_pdw_nodes_exec_sessions. Dla serwerless SQL pool lub Microsoft Fabric użyj sys.dm_exec_sessions.

Nazwa kolumny Typ danych Opis i informacje specyficzne dla wersji
session_id smallint Identyfikuje sesję skojarzona z każdym aktywnym połączeniem podstawowym. Nie może być null.
login_time datetime Godzina ustanowienia sesji. Nie może być null. Sesje, które nie zostały całkowicie zalogowane w momencie zapytania tego DMV, są wyświetlane z czasem logowania .1900-01-01
host_name nvarchar(128) Nazwa stanowiska roboczego klienta specyficznego dla sesji. Wartość dotyczy NULL sesji wewnętrznych. Nullable.

Uwaga bezpieczeństwa: Aplikacja kliencka podaje nazwę stacji roboczej i może dostarczać niedokładne dane. Nie polegaj na HOST_NAME nim jako na funkcji bezpieczeństwa.
program_name nvarchar(128) Nazwa programu klienckiego, który zainicjował sesję. Wartość dotyczy NULL sesji wewnętrznych. Nullable.
host_process_id int ID procesu programu klienckiego, który zainicjował sesję. Wartość dotyczy NULL sesji wewnętrznych. Nullable.
client_version int Protokół TDS jako wersja interfejsu używana przez klienta do łączenia się z serwerem. Wartość dotyczy NULL sesji wewnętrznych. Nullable.
client_interface_name nvarchar(32) Nazwa biblioteki/sterownika używanego przez klienta do komunikowania się z serwerem. Wartość dotyczy NULL sesji wewnętrznych. Nullable.
security_id varbinary(85) Identyfikator bezpieczeństwa Windows powiązany z logowaniem. Nie może być null.
login_name nvarchar(128) Nazwa logowania programu SQL Server, w ramach której jest obecnie uruchamiana sesja. Oryginalną nazwę logowania, która utworiła sesję, zobacz original_login_name. Może to być domena uwierzytelniona przez SQL Server lub domena uwierzytelniona przez Windows. Nie może być null.
nt_domain nvarchar(128) Domena Windows dla klienta, jeśli sesja korzysta z uwierzytelniania Windows lub zaufanego połączenia. Ta wartość dotyczy NULL sesji wewnętrznych i użytkowników spoza domeny. Nullable.
nt_user_name nvarchar(128) Nazwa użytkownika Windows dla klienta, jeśli sesja korzysta z uwierzytelniania Windows lub zaufanego połączenia. Ta wartość dotyczy NULL sesji wewnętrznych i użytkowników spoza domeny. Nullable.
status nvarchar(30) Stan sesji. Możliwe wartości:

Running - Obecnie uruchamia się jedno lub więcej żądań
Sleeping - Obecnie nie wykonuje żadnych żądań
Dormant - Sesja została zresetowana z powodu puli połączeń i jest teraz w stanie przed logowaniem.
Preconnect - Sesja znajduje się w klasyfikatorze Gubernatora Zasobów.

Nie może być null.
context_info varbinary(128) CONTEXT_INFO wartość sesji. Informacje kontekstowe są ustalane przez użytkownika za pomocą instrukcji SET CONTEXT_INFO . Nullable.
cpu_time int Czas CPU, w milisekundach, wykorzystany przez tę sesję. Nie może być null.
memory_usage int Liczba 8-KB stron pamięci wykorzystanych przez tę sesję. Nie może być null.
total_scheduled_time int Całkowity czas, w milisekundach, na który sesja (żądania w obrębie) była zaplanowana do wykonania. Nie może być null.
total_elapsed_time int Czas w milisekundach od momentu sesji. Nie może być null.
endpoint_id int ID punktu końcowego powiązanego z sesją. Nie może być null.
last_request_start_time datetime Czas, w którym rozpoczęła się ostatnia prośba na sesji. Ten czas obejmuje obecnie wykonywane żądanie. Nie może być null.
last_request_end_time datetime Godzina ostatniego ukończenia żądania w sesji. Nullable.
reads bigint Liczba odczytów wykonanych przez żądania w tej sesji podczas tej sesji. Nie może być null.
writes bigint Liczba zapisów wykonanych przez żądania w tej sesji podczas tej sesji. Nie może być null.
logical_reads bigint Liczba odczytów logicznych wykonanych przez żądania w tej sesji podczas tej sesji. Nie może być null.
is_user_process bit 0 jeśli sesja jest sesją systemową. W przeciwnym razie 1. Nie może być null.
text_size int TEXTSIZE ustawienie dla sesji. Nie może być null.
language nvarchar(128) LANGUAGE ustawienie dla sesji. Nullable.
date_format nvarchar(3) DATEFORMAT ustawienie dla sesji. Nullable.
date_first smallint DATEFIRST ustawienie dla sesji. Nie może być null.
quoted_identifier bit QUOTED_IDENTIFIER ustawienie dla sesji. Nie może być null.
arithabort bit ARITHABORT ustawienie dla sesji. Nie może być null.
ansi_null_dflt_on bit ANSI_NULL_DFLT_ON ustawienie dla sesji. Nie może być null.
ansi_defaults bit ANSI_DEFAULTS ustawienie dla sesji. Nie może być null.
ansi_warnings bit ANSI_WARNINGS ustawienie dla sesji. Nie może być null.
ansi_padding bit ANSI_PADDING ustawienie dla sesji. Nie może być null.
ansi_nulls bit ANSI_NULLS ustawienie dla sesji. Nie może być null.
concat_null_yields_null bit CONCAT_NULL_YIELDS_NULL ustawienie dla sesji. Nie może być null.
transaction_isolation_level smallint Poziom izolacji transakcji sesji.

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

Nie może być null.
lock_timeout int LOCK_TIMEOUT ustawienie dla sesji. Wartość jest wyrażona w milisekundach. Nie może być null.
deadlock_priority int DEADLOCK_PRIORITY ustawienie dla sesji. Nie może być null.
row_count bigint Liczba rzędów powróconych podczas sesji do tego momentu. Nie może być null.
prev_error int Identyfikator ostatniego błędu zwróconego w sesji. Nie może być null.
original_security_id varbinary(85) Identyfikator bezpieczeństwa Windows powiązany z .original_login_name Nie może być null.
original_login_name nvarchar(128) Nazwa logowania do SQL Server, której klient użył do utworzenia tej sesji. Może to być uwierzytelniona nazwa logowania SQL Server, domena użytkownika z Windows lub użytkownik z zamkniętą bazą danych. Sesja mogła przejść przez wiele niejawnych lub jawnych zmian kontekstu po początkowym połączeniu, na przykład, jeśli użyto EXECUTE AS . Nie może być null.
last_successful_logon datetime Czas ostatniego udanego logowania przed original_login_name rozpoczęciem obecnej sesji.
last_unsuccessful_logon datetime Czas ostatniej nieudanej próby logowania przed original_login_name rozpoczęciem obecnej sesji.
unsuccessful_logons bigint Liczba nieudanych prób logowania dla pomiędzy original_login_name i last_successful_logonlogin_time.
group_id int Identyfikator grupy obciążeń, do której należy ta sesja. Nie może być null.
database_id smallint Identyfikator bieżącej bazy danych dla każdej sesji.

W usłudze Azure SQL Database wartości są unikatowe w ramach pojedynczej bazy danych lub elastycznej puli, ale nie w obrębie serwera logicznego.

Dotyczy: SQL Server 2012 (11.x) i nowsze wersje.
authenticating_database_id int Identyfikator bazy danych uwierzytelniającej podmiot zabezpieczeń. W przypadku logowań wartość to 0. W przypadku użytkowników zawartej bazy danych wartość to identyfikator bazy danych zawartej bazy danych.

Dotyczy: SQL Server 2012 (11.x) i nowsze wersje.
open_transaction_count int Liczba otwartych transakcji na sesję.

Dotyczy: SQL Server 2012 (11.x) i nowsze wersje.
pdw_node_id int Identyfikator węzła, w ramach którego znajduje się ta dystrybucja.

Dotyczy do: Azure Synapse Analytics oraz Analytics Platform System (PDW).
page_server_reads bigint Liczba odczytów serwera stron wykonanych przez żądania w tej sesji podczas tej sesji. Nie może być null.

Dotyczy: Hiperskala usługi Azure SQL Database.

Permissions

Każdy może zobaczyć informacje o swojej sesji.

W SQL Server 2019 (15.x) i wcześniejszych wersjach wymaga VIEW SERVER STATE to zobaczenia wszystkich sesji na serwerze. W programie SQL Server 2022 (16.x) i nowszych wersjach wymagane jest VIEW SERVER PERFORMANCE STATE uprawnienie na serwerze.

W SQL Database wymaga VIEW DATABASE STATE zobaczenia wszystkich połączeń z aktualną bazą danych. VIEW DATABASE STATE nie może być przyznany w bazie master danych.

Uwagi

Po common criteria compliance enabled włączeniu opcji konfiguracji serwera statystyki logowania wyświetlane są w następujących kolumnach.

  • last_successful_logon
  • last_unsuccessful_logon
  • unsuccessful_logons

Jeśli ta opcja nie jest włączona, te kolumny zwracają wartości null. Aby uzyskać więcej informacji o ustawieniu tej opcji konfiguracji serwera, zobacz Konfiguracja serwera: włączona zgodność z kryteriami wspólnymi.

Połączenia administracyjne w Azure SQL Database widzą jeden wiersz na każdą sesję uwierzytelnioną. Sesje sa pojawiające się w zestawie wyników nie mają wpływu na limit użytkowników dla sesji. Połączenia niebędące administratorem widzą tylko informacje dotyczące sesji użytkownika bazy danych.

Ze względu na różnice w sposobie ich zapisywania mogą się nie zgadzaćsys.dm_tran_session_transactions... open_transaction_countopen_transaction_count

Kardynały relacji

Źródło Do Aplikuj Relacja
sys.dm_exec_sessions sys.dm_exec_requests session_id Jeden do zera lub jeden do wielu
sys.dm_exec_sessions sys.dm_exec_connections session_id Jeden do zera lub jeden do wielu
sys.dm_exec_sessions sys.dm_tran_session_transactions session_id Jeden do zera lub jeden do wielu
sys.dm_exec_sessions sys.dm_exec_cursors (session_id | 0) session_id CROSS APPLY

OUTER APPLY
Jeden do zera lub jeden do wielu
sys.dm_exec_sessions sys.dm_db_session_space_usage session_id Jeden do jednego

Przykłady

A. Znajdź użytkowników podłączonych do serwera

Poniższy przykład znajduje użytkowników podłączonych do serwera i zwraca liczbę sesji dla każdego użytkownika.

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

B. Znajdź kursory o długim czasie

Poniższy przykład pokazuje kursory, które były otwarte dłużej niż określony czas, kto je stworzył oraz na jakiej sesji się znajdują.

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. Znajdź sesje bezczynnościowe, w których są otwarte transakcje

Poniższy przykład znajduje sesje z otwartymi transakcjami i są bezczynne. Sesja bezczynna to taka, w której nie ma obecnie uruchamianego żądania.

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. Znajdź informacje o powiązaniu zapytania

Poniższy przykład zbiera informacje o własnym połączeniu zapytania:

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;
  • dynamiczne widoki zarządzania systemu
  • Dynamiczne widoki zarządzania i funkcje związane z wykonywaniem (Transact-SQL)