0

我是一名开发人员,帮助 DBA 解决零星的 CPU 100% 问题。

请参阅下面的 SQL 查询:

Select spid,hostname,hostprocess,program_name,nt_username, blocked, waittime, waittype, loginame,cmd,spid,waittype,waittime,lastwaittype,cpu,physical_io,memusage,
login_time,last_batch,open_tran,status,net_address, t.text 
from sys.sysprocesses sp 
CROSS APPLY( select text from sys.dm_exec_sql_text(sp.sql_handle))t 
where hostname = 'MyOtherDatabaseServer'

它返回一条记录。然后我在 MyOtherDatabaseServer 上执行以下命令:

EXECUTE sp_WhoIsActive

有没有办法可以将服务器 1 上的结果与服务器 2 上的结果联系起来?我希望 sp_WhoIsActive 会为每条记录返回一个进程 ID(因为第一个查询中有一个 HostProcess ,所以会绑定它们)。

服务器 1 和 MyOtherDatabaseServer 之间有一个链接服务器设置。我正在尝试查找“服务器 1”上的哪个数据库正在使用链接服务器并在 MyOtherDatabaseServer 上运行查询。

4

1 回答 1

0

在运行链接服务器查询时,它将生成 OLEDB 的等待类型,并且等待资源将作为链接服务器名称和括号中的 SPID 列出。

这可以使用sys.dm_exec_requestswait_type 和 wait_resource 列中的动态管理视图,或在sys.sysprocesseswaitresource 列中的表中查看。

在这种情况下,主机进程并不能真正帮助您,因为它指的是资源监视器中显示的 PID,并且sqlservr在链接服务器查询的情况下只是实例本身。

于 2019-07-25T11:24:37.150 回答