Ser*_*dia 3 sql-server t-sql sp-whoisactive
我正在使用 sp_WhoIsActive。
当服务器发生阻塞时,我想快速确定谁是罪魁祸首。
专栏login_name没有给我太多关于拦截器的信息,因为有数百人使用公司的应用程序并在相同的下登录login_name。
我可以看到blocking_session_id,但这并没有告诉我阻止者的host_name.
还有一个专栏host_name,但这是一个waiter(不是阻止者)
那么有什么方法可以快速找到该用户host_name或machine name任何其他身份的用户是谁呢blocker?
是的,您只需将blocking_session_id 与拦截器的session_id 相关联即可。在以下输出中,您会看到会话 68 被会话 66 阻止,因此您只需查找会话 66 的数据即可。
为了最快地找到区块领导者,请务必使用以下参数,以便阻止最多其他会话的会话将位于顶部:
@find_block_leaders = 1, @sort_order = '[blocked_session_count] DESC'
Run Code Online (Sandbox Code Playgroud)
示例输出如下:
sp_whoisactive
@output_column_list='[session_id][block%][host_name][login_name]'
, @find_block_leaders = 1
, @sort_order = '[blocked_session_count] DESC'
session_id blocking_session_id blocked_session_count host_name login_name
66 NULL 1 host1 user1
68 66 0 host2 user2
Run Code Online (Sandbox Code Playgroud)
如果所有会话都来自应用程序服务器(这很常见),则主机名只是该应用程序服务器,并且 SQL Server 端无法查看与该连接关联的实际客户端计算机。应用服务器。如果您想跟踪类似的内容,您需要开始在应用程序服务器上记录相关信息,或者,如果您可以通过查看查询来弄清楚,请使用扩展事件或跟踪来查看该应用程序服务器中正在运行哪些查询会议。除非应用程序已经具备打开某些关联日志记录的管道,否则没有简单的方法。
另外值得注意的是,SQL 客户端并不总是设置 host_name 属性,因此如果该属性为空,则只是因为应用程序将 SQL 连接配置为忽略该信息。
| 归档时间: |
|
| 查看次数: |
455 次 |
| 最近记录: |