如何确定在链接服务器上进行查询的会话的 spid?

Jim*_*y W 5 sql-server-2008 sql-server

我有一个在SQL Server实例上运行的会话,它阻塞了其他会话(保持锁定而不释放它)。

查询sys.sysprocesses产生了不同SQL Server实例的主机名。

我想知道最终负责阻止链接服务器上的会话的原始会话的 spid。

  • 我该怎么做?

Bob*_*mes 2

您必须检查远程服务器上正在运行的查询。您可以通过使用以下 dmv 查询过滤链接服务器名称来隔离链接服务器查询。

    SELECT [s].[session_id] AS                          [spid]
       ,[s].[status]
       ,[s].[login_name] AS                         [loginName]
       ,[s].host_name AS                            [hostName]
       ,COALESCE(DB_NAME([r].[database_id]), '') AS [dbName]
       ,[r].[command]
       ,[wt].[wait_type] AS                         [waitType]
       ,[s].[login_time] AS                         [loginTime]
       ,[s].[last_request_end_time] AS              [lastBatch]
       ,[s].[program_name] AS                       [programName]
       ,[t].text AS                                 [lastSQLText]
FROM [sys].[dm_exec_sessions] AS [s]
     LEFT JOIN [sys].[dm_exec_requests] AS [r]
     ON [r].[session_id] = [s].[session_id]
     LEFT JOIN [sys].[dm_exec_connections] AS [c]
     ON [c].[session_id] = [s].[session_id]
     LEFT OUTER JOIN [sys].[dm_os_waiting_tasks] AS [wt]
     ON [s].[session_id] = [wt].[session_id]
     CROSS APPLY [sys].[dm_exec_sql_text]([c].[most_recent_sql_handle])AS [t]
WHERE [s].[status] = 'Running'
  AND [t].[text] like '%LinkedServerName%';
Run Code Online (Sandbox Code Playgroud)