sys.dm_exec_requests 中具有相應阻塞會話 ID 的記錄未顯示在同一結果集中是什麼意思?
sys.dm_exec_requests - 這些是活動請求
sys.dm_exec_sessions - 這些是活動會話
一個會話可以有 1 個或多個請求。
從檢測和解決阻塞的角度來看,我正在探索上述dmvs。我觀察到 sys.dm_exe_sessions 中存在的 session_id 在 sys.dm_exec_requests 中不存在。
例如 - 在 sys.db_exec_requests 中有一條等待類型為的記錄,
LCK_M_X
等待資源為KEY: 2......
。sys.dm_exec_requests 中未顯示相應的阻塞會話 ID。它顯示在 sys.dm_exec_sessions 中,狀態為
sleeping
. 這種情況是什麼意思 - 即 - 請求因睡眠會話而被阻止?
在 SQL Server 的連接模型中,存在三個概念:連接、會話和請求。
會話代表客戶端和伺服器之間關係的邏輯狀態,而連接代表實際的物理網路連接。
一個客戶端可以建立多個物理連接,並且可以有多個會話。通常這些是一一對應的,除了沒有底層連接的系統會話。(理論上,也可以將多個客戶端連接連接到單個會話,但這是不尋常的)。
然後一個會話可以發出一個或多個請求,這些請求
sys.dm_exec_requests
與sys.dm_exec_sessions
.在使用MARS的情況下,每個會話可能有多個活動請求,這就是它是一對多關係的原因。
sys.dm_exec_requests - “返回有關在 SQL Server 中執行的每個請求的資訊。 ”
本質上,這是每個正在執行的查詢和數據庫命令的視圖。這裡的
session_id
in 應該與sys.dm_exec_sessions
. 從某種意義上說,這是一個子視圖sys.dm_exec_sessions
。sys.dm_exec_sessions - “在 SQL Server 上每個經過身份驗證的會話返回一行。
sys.dm_exec_sessions
是一個伺服器範圍的視圖,顯示有關所有活動使用者連接和內部任務的資訊。 ”這實質上是與 SQL Server 實例的每個連接的視圖。如果有人連接到伺服器但沒有主動執行任何查詢,那麼您將不會
session_id
在視圖中從該視圖中看到他們sys.dm_exec_requests
。從某種意義上說,這是一個父視圖sys.dm_exec_requests
。