Поделиться через


sys.dm_exec_sessions (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в Microsoft Fabric

Возвращает одну строку на сеанс с проверкой подлинности в SQL Server. sys.dm_exec_sessions — это представление области сервера, отображающее сведения обо всех активных подключениях пользователей и внутренних задачах. Эти сведения включают в себя данные о версии клиента, имени клиентской программы, времени входа, имени входа пользователя, текущих настройках сеанса и т.д. Используется sys.dm_exec_sessions для первого просмотра текущей загрузки системы и определения интересующего сеанса, а затем получения дополнительных сведений об этом сеансе с помощью других динамических административных представлений или динамических функций управления.

sys.dm_exec_sessionssys.dm_exec_requests Представление sys.dm_exec_connectionsсовместимости системы sys.sysprocesses и динамические административные представления сопоставляются с устаревшим представлением совместимости системы.

Примечание.

Чтобы вызвать это из выделенного пула SQL в Azure Synapse Analytics или Analytics Platform System (PDW), см . sys.dm_pdw_nodes_exec_sessions. Для бессерверного пула SQL или Microsoft Fabric используется sys.dm_exec_sessions.

Имя столбца Тип данных Описание и сведения о конкретной версии
session_id smallint Идентификатор сеанса, связанный со всеми активными первичными соединениями. Не допускает значения NULL.
login_time datetime Время подключения сеанса. Не допускает значения NULL. Сеансы, которые не полностью вошли в систему во время запроса динамического административного представления, отображаются с временем 1900-01-01входа.
host_name nvarchar(128) Имя клиентской рабочей станции, указанное в сеансе. Значение — NULL для внутренних сеансов. Допускает значение NULL.

Примечание по безопасности. Клиентское приложение предоставляет имя рабочей станции и может предоставлять неточные данные. Не полагаться на HOST_NAME функцию безопасности.
program_name nvarchar(128) Имя клиентской программы, которая инициировала сеанс. Значение — NULL для внутренних сеансов. Допускает значение NULL.
host_process_id int Идентификатор процесса клиентской программы, которая инициировала сеанс. Значение — NULL для внутренних сеансов. Допускает значение NULL.
client_version int Версия TDS-протокола интерфейса, который используется клиентом для подключения к серверу. Значение — NULL для внутренних сеансов. Допускает значение NULL.
client_interface_name nvarchar(32) Имя библиотеки или драйвера, используемого клиентом для взаимодействия с сервером. Значение — NULL для внутренних сеансов. Допускает значение NULL.
security_id varbinary(85) Идентификатор безопасности Windows, связанный с именем входа. Не допускает значения NULL.
login_name nvarchar(128) Имя входа SQL Server, под которым выполняется текущий сеанс. Исходный имя входа, создавший сеанс, см. в разделе original_login_name. Может быть именем пользователя домена, прошедшим проверку подлинности SQL Server, или именем пользователя домена, прошедшим проверку подлинности Windows. Не допускает значения NULL.
nt_domain nvarchar(128) Домен Windows для клиента, если во время сеанса применяется проверка подлинности Windows или доверительное соединение. Это значение предназначено для внутренних сеансов и пользователей, не относящихся NULL к домену. Допускает значение NULL.
nt_user_name nvarchar(128) Имя пользователя Windows для клиента, если во время сеанса используется проверка подлинности Windows или доверительное соединение. Это значение предназначено для внутренних сеансов и пользователей, не относящихся NULL к домену. Допускает значение NULL.
status nvarchar(30) Состояние сеанса. Возможные значения:

Running — В настоящее время выполняется один или несколько запросов
Sleeping - В настоящее время выполнение запросов не выполняется
Dormant — Сеанс был сброшен из-за пула подключений и теперь находится в состоянии предварительной записи.
Preconnect — Сеанс находится в классификаторе регулятора ресурсов.

Не допускает значения NULL.
context_info varbinary(128) CONTEXT_INFO значение сеанса. Сведения о контексте задаются пользователем с помощью инструкции SET CONTEXT_INFO . Допускает значение NULL.
cpu_time int Время ЦП в миллисекундах, используемое этим сеансом. Не допускает значения NULL.
memory_usage int Количество 8-килобайтовых страниц памяти, используемых данным сеансом. Не допускает значения NULL.
total_scheduled_time int Общее время, назначенное данному сеансу (включая его вложенные запросы) для исполнения, в миллисекундах. Не допускает значения NULL.
total_elapsed_time int Время, прошедшее с момента установки сеанса в миллисекундах. Не допускает значения NULL.
endpoint_id int Идентификатор конечной точки, связанной с сеансом. Не допускает значения NULL.
last_request_start_time datetime Время, когда начался последний запрос данного сеанса. На этот раз включает текущий исполняемый запрос. Не допускает значения NULL.
last_request_end_time datetime Время завершения последнего запроса в рамках данного сеанса. Допускает значение NULL.
reads bigint Количество операций чтения, выполненных запросами данного сеанса. Не допускает значения NULL.
writes bigint Количество операций записи, выполненных запросами данного сеанса. Не допускает значения NULL.
logical_reads bigint Количество логических операций чтения, выполняемых запросами в этом сеансе, во время этого сеанса. Не допускает значения NULL.
is_user_process bit 0 Значение , если сеанс является системным сеансом. В противном случае возвращается 1. Не допускает значения NULL.
text_size int TEXTSIZE параметр сеанса. Не допускает значения NULL.
language nvarchar(128) LANGUAGE параметр сеанса. Допускает значение NULL.
date_format nvarchar(3) DATEFORMAT параметр сеанса. Допускает значение NULL.
date_first smallint DATEFIRST параметр сеанса. Не допускает значения NULL.
quoted_identifier bit QUOTED_IDENTIFIER параметр сеанса. Не допускает значения NULL.
arithabort bit ARITHABORT параметр сеанса. Не допускает значения NULL.
ansi_null_dflt_on bit ANSI_NULL_DFLT_ON параметр сеанса. Не допускает значения NULL.
ansi_defaults bit ANSI_DEFAULTS параметр сеанса. Не допускает значения NULL.
ansi_warnings bit ANSI_WARNINGS параметр сеанса. Не допускает значения NULL.
ansi_padding bit ANSI_PADDING параметр сеанса. Не допускает значения NULL.
ansi_nulls bit ANSI_NULLS параметр сеанса. Не допускает значения NULL.
concat_null_yields_null bit CONCAT_NULL_YIELDS_NULL параметр сеанса. Не допускает значения NULL.
transaction_isolation_level smallint Уровень изоляции транзакции данного сеанса:

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

Не допускает значения NULL.
lock_timeout int LOCK_TIMEOUT параметр сеанса. Значение указывается в миллисекундах. Не допускает значения NULL.
deadlock_priority int DEADLOCK_PRIORITY параметр сеанса. Не допускает значения NULL.
row_count bigint Количество строк, возвращенных сеансом на текущий момент времени. Не допускает значения NULL.
prev_error int Идентификатор последней ошибки, возвращенной в данном сеансе. Не допускает значения NULL.
original_security_id varbinary(85) Идентификатор безопасности Windows, связанный original_login_nameс . Не допускает значения NULL.
original_login_name nvarchar(128) Имя входа SQL Server, используемое клиентом для создания этого сеанса. Может быть именем входа, прошедшим проверку подлинности SQL Server, именем пользователя домена, прошедшим проверку подлинности Windows, или пользователем автономной базы данных. Сеанс может пройти через множество неявных или явных переключений контекста после начального подключения, например, если используется EXECUTE AS . Не допускает значения NULL.
last_successful_logon datetime Время последнего успешного входа в original_login_name систему до начала текущего сеанса.
last_unsuccessful_logon datetime Время последней неудачной попытки входа в original_login_name систему до начала текущего сеанса.
unsuccessful_logons bigint Число неудачных попыток входа между original_login_name last_successful_logon и login_time.
group_id int Идентификатор группы рабочей нагрузки, которой принадлежит этот сеанс. Не допускает значения NULL.
database_id smallint Идентификатор текущей базы данных для каждого сеанса.

В База данных SQL Azure значения уникальны в одной базе данных или эластичном пуле, но не в логическом сервере.

Применимо: SQL Server 2012 (11.x) и более поздних версий.
authenticating_database_id int Идентификатор базы данных, выполняющей проверку подлинности участника. Для имен входа используется 0значение . Для пользователей автономной базы данных значением является идентификатор базы данных автономной базы данных.

Применимо: SQL Server 2012 (11.x) и более поздних версий.
open_transaction_count int Количество открытых транзакций на сеанс.

Применимо: SQL Server 2012 (11.x) и более поздних версий.
pdw_node_id int Идентификатор узла, на который находится данное распределение.

Область применения: Azure Synapse Analytics и система платформы аналитики (PDW).
page_server_reads bigint Количество операций чтения сервера страниц, выполняемых запросами в этом сеансе, во время этого сеанса. Не допускает значения NULL.

Применимо к: База данных SQL Azure гипермасштабирование.

Разрешения

Каждый может просматривать свои собственные сведения о сеансе.

В SQL Server 2019 (15.x) и более ранних версиях требуется VIEW SERVER STATE просмотреть все сеансы на сервере. В SQL Server 2022 (16.x) и более поздних версиях требуется VIEW SERVER PERFORMANCE STATE разрешение на сервере.

В База данных SQL требуется VIEW DATABASE STATE просмотреть все подключения к текущей базе данных. VIEW DATABASE STATE невозможно предоставить в master базе данных.

Замечания

common criteria compliance enabled Если включен параметр конфигурации сервера, статистика входа отображается в следующих столбцах.

  • last_successful_logon
  • last_unsuccessful_logon
  • unsuccessful_logons

Если этот параметр не включен, эти столбцы возвращают значения NULL. Дополнительные сведения о настройке этого параметра конфигурации сервера см. в разделе "Конфигурация сервера": включена поддержка общих критериев.

Подключения администратора на База данных SQL Azure отображают одну строку для каждого сеанса проверки подлинности. Сеансы sa , отображаемые в наборе результатов, не влияют на квоту пользователя для сеансов. Подключения, не относящиеся к администратору, видят только сведения, связанные с сеансами пользователей базы данных.

Из-за различий в том, как они записываются, open_transaction_count может не соответствовать sys.dm_tran_session_transactions.open_transaction_count.

Кратности связей

С дт. По Подключить/Применить Отношение
sys.dm_exec_sessions sys.dm_exec_requests session_id Один к нулю или один ко многим.
sys.dm_exec_sessions sys.dm_exec_connections session_id Один к нулю или один ко многим.
sys.dm_exec_sessions sys.dm_tran_session_transactions session_id Один к нулю или один ко многим.
sys.dm_exec_sessions sys.dm_exec_cursors ( | session_id0) session_id CROSS APPLY

OUTER APPLY
Один к нулю или один ко многим.
sys.dm_exec_sessions sys.dm_db_session_space_usage session_id Взаимно-однозначный

Примеры

А. Поиск пользователей, подключенных к серверу

В следующем примере производится поиск пользователей, подключенных к серверу, и возвращаются сведения о числе сеансов для каждого пользователя.

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

B. Поиск длительных курсоров

В следующем примере находятся курсоры, открытые более определенного периода времени, которые создали курсоры и на каком сеансе находятся курсоры.

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

В. Поиск бездействующих сеансов с открытыми транзакциями

В следующем производится поиск сеансов, имеющих открытые транзакции, но при этом бездействующих. Бездействующим сеансом считается сеанс, который в настоящий момент не выполняет запросов.

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. Поиск сведений о собственном подключении запроса

В следующем примере собираются сведения о собственном подключении запроса:

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;