共用方式為


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。

安全性注意事項安全性注意事項

用戶端應用程式會提供工作站名稱,而且可提供不正確的資料。 請勿依賴 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)

用戶端的 Windows 網域 (如果工作階段使用 Windows 驗證或信任連接)。 內部工作階段和非網域使用者的這個值為 NULL。 可為 Null。

nt_user_name

nvarchar(128)

用戶端的 Windows 使用者名稱 (如果工作階段使用 Windows 驗證或信任連接)。 內部工作階段和非網域使用者的這個值為 NULL。 可為 Null。

status

nvarchar(30)

工作階段的狀態。 可能的值如下:

  • 執行中 - 目前執行一或多項要求

  • 睡眠中 - 目前不執行任何要求

  • 休眠 – 工作階段因連接共用而重設,目前處於登入前狀態。

  • Preconnect - 工作階段在資源管理員類別器中。

不可為 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;

請參閱

參考

動態管理檢視和函數 (Transact-SQL)

執行相關的動態管理檢視和函數 (Transact-SQL)