sys.dm_exec_requests 中具有相应阻塞会话 ID 的记录未显示在同一结果集中意味着什么?

var*_*ble 0 sql-server sql-server-2019

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......。相应的阻塞会话 ID 未显示在 sys.dm_exec_requests 中。

它在 sys.dm_exec_sessions 中显示,状态为sleeping。这种情况意味着什么 - 即 - 由于休眠会话而导致请求被阻止?

Cha*_*ace 5

在SQL Server的连接模型中,存在三个概念:连接、会话和请求。

会话代表客户端和服务器之间关系的逻辑状态,而连接代表实际的物理网络连接。

一个客户端可以建立多个物理连接,并且可以有多个会话。通常,除了没有底层连接的系统会话之外,它们具有一对一的对应关系。(理论上,也可以将多个客户端连接连接到单个会话,但这并不常见)。


然后,会话可以发出一个或多个请求,这些sys.dm_exec_requests请求位于 中并且与sys.dm_exec_sessions.

在使用MARS的情况下,每个会话可能有多个活动请求,这就是为什么它是一对多关系的原因。