sys.dm_exec_sessions (Transact-SQL)
針對 SQL Server 上經過驗證的各個工作階段傳回一個資料列。 sys.dm_exec_sessionssys.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。 |
||
database_id |
smallint |
每個工作階段之目前資料庫的識別碼。 |
||
authenticating_database_id |
int |
驗證主體之資料庫的識別碼。 如果是登入,此值會是 0。 如果是自主資料庫使用者,此值會是自主資料庫的資料庫識別碼。 |
||
open_transaction_count |
int |
每個工作階段的開啟交易數目。 |
權限
需要伺服器的 VIEW SERVER STATE 權限。
[!附註]
如果使用者具有伺服器的 VIEW SERVER STATE 權限,將可看到 SQL Server 執行個體上所有執行中的工作階段;否則只可看到目前的工作階段。
備註
當啟用 common criteria compliance enabled 伺服器設定選項時,在下列資料行會顯示登入統計數據。
last_successful_logon
last_unsuccessful_logon
unsuccessful_logons
如果沒有啟用這個選項,這些資料行會傳回 null 值。 如需如何設定此伺服器組態選項的詳細資訊,請參閱<通用條件符合已啟用伺服器組態選項>。
關聯性基數
從 |
到 |
開啟/套用 |
關聯性 |
---|---|---|---|
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
);
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
JOIN sys.dm_exec_sessions AS s
ON c.session_id = s.session_id
WHERE c.session_id = @@SPID;