sys.dm_exec_sessions (Transact-SQL)
適用於:Microsoft Fabric Microsoft網狀架構倉儲中的 SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Platform System (PDW) SQL 分析端點
針對 SQL Server 上每個已驗證的工作階段傳回一個資料列。 sys.dm_exec_sessions
是伺服器範圍檢視,顯示所有作用中用戶連線和內部工作的相關信息。 此資訊包括用戶端版本、用戶端程式名稱、用戶端登入時間、登入使用者、目前的工作階段設定等等。 使用 sys.dm_exec_sessions
來先檢視目前的系統負載,並識別感興趣的會話,然後使用其他動態管理檢視或動態管理功能來深入瞭解該會話的相關信息。
sys.dm_exec_connections
、 sys.dm_exec_sessions
和 sys.dm_exec_requests
動態管理檢視會對應至已被取代的 sys.sysprocesses 系統相容性檢視。
注意
若要從 Azure Synapse Analytics 或 Analytics Platform System (PDW) 中的專用 SQL 集區呼叫此專案,請參閱 sys.dm_pdw_nodes_exec_sessions。 對於無伺服器 SQL 集區或 Microsoft Fabric,請使用 sys.dm_exec_sessions
。
資料行名稱 | 資料類型 | 描述和版本特定資訊 |
---|---|---|
session_id | smallint | 識別每個使用中的主要連接所關聯的工作階段。 不可為 Null。 |
login_time | datetime | 建立會話的時間。 不可為 Null。 未完成登入的會話,在查詢此 DMV 時,會以 的 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) | Microsoft與登入相關聯的 Windows 安全性識別碼。 不可為 Null。 |
login_name | nvarchar(128) | 目前用來執行工作階段的 SQL Server 登入名稱。 如需建立工作階段的原始登入名稱,請參閱 original_login_name 。 可以是 SQL Server 驗證的登入名稱或 Windows 驗證的功能變數名稱。 不可為 Null。 |
nt_domain | nvarchar(128) | 適用於:SQL Server 2008 (10.0.x) 和更新版本 如果會話使用 Windows 驗證或受信任的連線,則用戶端的 Windows 網域。 對於內部會話和非網域使用者而言,此值為 NULL。 可為 Null。 |
nt_user_name | nvarchar(128) | 適用於:SQL Server 2008 (10.0.x) 和更新版本 如果會話使用 Windows 驗證或受信任的連線,用戶端的 Windows 用戶名稱。 對於內部會話和非網域使用者而言,此值為 NULL。 可為 Null。 |
status | nvarchar(30) | 會話的狀態。 可能的值: 執行 - 目前正在執行一或多個要求 睡眠 - 目前未執行任何要求 休眠 - 會話因為連線共用而已重設,現在處於預先狀態。 Preconnect - 會話位於 Resource Governor 分類器中。 不可為 Null。 |
context_info | varbinary(128) | 會話CONTEXT_INFO值。 內容資訊是由使用者使用 SET CONTEXT_INFO 語句所設定。 可為 Null。 |
cpu_time | int | 此會話所使用的CPU時間,以毫秒為單位。 不可為 Null。 |
memory_usage | int | 此工作階段所使用的 8 KB 記憶體頁數。 不可為 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) | 會話的語言設定。 可為 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 = 未指定 1 = ReadUncommitted 2 = ReadCommitted 3 = RepeatableRead 4 = 可串行化 5 = 快照集 不可為 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) | Microsoft與 original_login_name 相關聯的 Windows 安全性識別符。 不可為 Null。 |
original_login_name | nvarchar(128) | 用戶端用來建立此工作階段的 SQL Server 登入名稱。 可以是 SQL Server 驗證的登入名稱、Windows 驗證的功能變數名稱或自主資料庫使用者。 會話可能會在初始連接之後經過許多隱含或明確的內容切換。 例如,如果使用 EXECUTE AS 。 不可為 Null。 |
last_successful_logon | datetime | 適用於:SQL Server 2008 (10.0.x) 和更新版本 在目前會話開始之前,original_login_name上次成功登入的時間。 |
last_unsuccessful_logon | datetime | 適用於:SQL Server 2008 (10.0.x) 和更新版本 在目前會話啟動之前,original_login_name上次失敗登入嘗試的時間。 |
unsuccessful_logons | bigint | 適用於:SQL Server 2008 (10.0.x) 和更新版本 與 login_time 之間 last_successful_logon 嘗試失敗的登入次數original_login_name 。 |
group_id | int | 此工作負載群組的標識碼。 不可為 Null。 |
database_id | smallint | 適用於:SQL Server 2012 (11.x) 和更新版本 每個工作階段目前資料庫的識別碼。 在 Azure SQL 資料庫中,這些值在單一資料庫或彈性集區內是唯一的,但在邏輯伺服器內則不是唯一的。 |
authenticating_database_id | int | 適用於:SQL Server 2012 (11.x) 和更新版本 驗證主體的資料庫標識碼。 針對登入,此值會是0。 對於自主資料庫使用者,此值會是自主資料庫的資料庫標識碼。 |
open_transaction_count | int | 適用於:SQL Server 2012 (11.x) 和更新版本 每個會話開啟的交易數目。 |
pdw_node_id | int | 適用於:Azure Synapse Analytics、Analytics Platform System (PDW) 此散發節點的標識碼。 |
page_server_reads | bigint | 適用於:Azure SQL 資料庫 超大規模資料庫 在此工作階段期間,此工作階段中的要求所執行的頁面伺服器讀取數目。 不可為 Null。 |
權限
每個人都可以看到自己的會話資訊。
SQL Server: 需要 VIEW SERVER STATE
SQL Server 的許可權,才能查看伺服器上的所有會話。
SQL 資料庫:VIEW DATABASE STATE
需要查看目前資料庫的所有連線。 VIEW DATABASE STATE
無法在資料庫中授與 master
。
SQL Server 2022 和更新版本的權限
需要伺服器上的 VIEW SERVER PERFORMANCE STATE 權限。
備註
啟用通用準則合規性的伺服器組態選項時,登入統計數據會顯示在下列數據行中。
last_successful_logon
last_unsuccessful_logon
unsuccessful_logons
如果未啟用此選項,這些數據行會傳回 Null 值。 如需如何設定此伺服器組態選項的詳細資訊,請參閱 一般準則合規性已啟用伺服器組態選項。
Azure 上的系統管理員連線 SQL 資料庫 每個已驗證的會話看到一個數據列。 出現在結果集中的 「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_id | 0) | session_id CROSS APPLY OUTER APPLY |
一對零或一對多 |
sys.dm_exec_sessions |
sys.dm_db_session_space_usage | session_id | 一對一 |
範例
A. 尋找已連線到伺服器的使用者
下列範例會尋找連線到伺服器的使用者,並傳回每個使用者的會話數目。
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
C. 尋找具有開啟交易的閑置會話
下列範例會尋找具有開啟交易且閑置的會話。 閑置會話是目前沒有執行要求的會話。
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;
下一步
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應