共用方式為


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)

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

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

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

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

  • 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。

權限

需要伺服器的 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
    );