在咨询时sys.dm_exec_sessions
是否可以附加他们的 session_context?
我有一个后端,其连接池有 100 个。当将连接分配给新的传入请求时,我会将发出该请求的用户存储到连接的session_context
。
exec sp_set_session_context @Key = N'User', @Value = @user_id
现在,当我面临僵局时,我想识别所涉及的用户并获取session_context
每个用户的“用户”值sys.dm_exec_sessions
。
可以吗?謝謝。
虽然 ChatGPT 可能暗示这是可能的,但事实并非如此,您无法更改其他人的
SESSION_CONTEXT
。您甚至看不到它。这是设计使然 - 会话的上下文对该会话是私有的,就像 #temp 表一样。应用程序可以(在用户登录时,也许?)将信息与
session_id
会话键表中的信息一起存储,例如然后登录时,应用程序可以发送:
它也可以设置
SESSION_CONTEXT()
,但这听起来对您的用例没有帮助,因为只有他们才能看到它。但是,我不得不怀疑您对死锁的反应速度有多快,以至于会话仍然处于活动状态。您可能需要运行日志,例如:然后只需在登录时插入:
现在,当您知道死锁的时间时,您可以通过以下方式找出所涉及的用户:
虽然通常建议使用较新的
sp_set_session_context
,但不可能从不同的连接获取该信息,并且它在 XEvents 或任何 DMV 中都不可用。相反,您可以使用较旧的
CONTEXT_INFO
。请注意,它仅允许最大 128 个字节,并且您可能需要检查是否没有其他人在使用它,因为没有密钥。您可以使用来查看它,或者从和中的列中
SELECT CONTEXT_INFO();
获取它。它也可以在 XEvent 会话中的 字段下使用。context_info
dm_exec_sessions
dm_exec_requests
context_info