sys.dm_exec_sessions (Transact-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 系統資料表。
資料行名稱 |
資料類型 |
描述 |
---|---|---|
session_id |
smallint |
識別每個使用中的主要連接所關聯的工作階段。不可為 Null。 |
login_time |
datetime |
建立工作階段的時間戳記。不可為 Null。 |
host_name |
nvarchar(128) |
工作階段的特定用戶端工作站名稱。內部工作階段的值為 NULL。可為 Null。 |
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) |
用戶端的 Windows 網域 (如果工作階段使用 Windows 驗證或信任連接)。內部工作階段和非網域使用者的這個值為 NULL。可為 Null。 |
nt_user_name |
nvarchar(128) |
用戶端的 Windows 使用者名稱 (如果工作階段使用 Windows 驗證或信任連接)。內部工作階段和非網域使用者的這個值為 NULL。可為 Null。 |
status |
nvarchar(30) |
工作階段的狀態。可能的值如下:
不可為 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) |
工作階段的 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 = ReadUncomitted 2 = ReadCommitted 3 = Repeatable 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) |
與 original_login_name 相關聯的 Microsoft Windows 安全性識別碼。不可為 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 |
在 last_successful_logon 與 login_time 之間,original_login_name 嘗試登入不成功的次數。 |
group_id |
int |
這個工作階段所屬之工作負載群組的識別碼。不可設為 Null。 |
權限
需要伺服器的 VIEW SERVER STATE 權限。
[!附註]
如果使用者具有伺服器的 VIEW SERVER STATE 權限,使用者會看到 SQL Server 執行個體上所有執行中的工作階段;否則,使用者只會看到目前的工作階段。
備註
通用條件符合的登入統計資料
當您使用預存程序 sp_configure 來啟用 common criteria compliance enabled 選項時,登入統計資料就會儲存並顯示於 sys.dm_exec_sessions 的下列資料行中:
last_successful_logon
last_unsuccessful_logon
unsuccessful_logons
如果此伺服器組態選項未啟用,這些 sys.dm_exec_sessions 資料行將傳回 Null 值。如需如何設定此伺服器組態選項的詳細資訊,請參閱<common criteria compliance enabled 選項>。
關聯性基數
從 |
到 |
開啟/套用 |
關聯性 |
---|---|---|---|
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
JOIN sys.dm_exec_sessions AS s
ON c.session_id = s.session_id
WHERE DATEDIFF(mi, c.creation_time, GETDATE()) > 5;
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
);