sys.dm_exec_sessions (Transact-SQL)
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲
針對 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) | 與登入相關聯的 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) | 會話的狀態。 可能的值:Running - 目前執行一或多個要求Sleeping - 目前未執行任何要求Dormant - 因為連線共用而已重設會話,且目前處於預先狀態。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) | 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 = ReadUncommitted 2 = ReadCommitted 3 = RepeatableRead 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 相關聯的 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 | 與 login_time 之間 last_successful_logon 嘗試失敗的登入次數original_login_name 。 |
group_id |
int | 此工作負載群組的標識碼。 不可為 Null。 |
database_id |
smallint | 每個工作階段目前資料庫的識別碼。 在 Azure SQL 資料庫中,這些值在單一資料庫或彈性集區內是唯一的,但在邏輯伺服器內則不是唯一的。 適用於:SQL Server 2012 (11.x) 和更新版本。 |
authenticating_database_id |
int | 驗證主體的資料庫標識碼。 針對登入,值為 0 。 對於自主資料庫使用者,此值是自主資料庫的資料庫標識碼。適用於:SQL Server 2012 (11.x) 和更新版本。 |
open_transaction_count |
int | 每個會話開啟的交易數目。 適用於:SQL Server 2012 (11.x) 和更新版本。 |
pdw_node_id |
int | 此散發節點的標識碼。 適用於:Azure Synapse Analytics 和 Analytics Platform System (PDW)。 |
page_server_reads |
bigint | 在此工作階段期間,此工作階段中的要求所執行的頁面伺服器讀取數目。 不可為 Null。 適用於:Azure SQL 資料庫 超大規模資料庫。 |
權限
每個人都可以看到自己的會話資訊。
在 SQL Server 2019 (15.x) 和舊版中,需要 VIEW SERVER STATE
查看伺服器上的所有會話。 在 SQL Server 2022 (16.x) 和更新版本中,需要 VIEW SERVER PERFORMANCE STATE
伺服器上的許可權。
在 SQL 資料庫 中,需要VIEW DATABASE STATE
查看目前資料庫的所有連線。 VIEW DATABASE STATE
無法在資料庫中授與 master
。
備註
common criteria compliance enabled
啟用伺服器組態選項時,登入統計數據會顯示在下列數據行中。
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;