sp_WhoIsActive/spwho2 - 获取进程 ID



我是一名开发人员,帮助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 上运行查询。

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

可以使用wait_type列和wait_resource列中的sys.dm_exec_requests动态管理视图或 waitresource 列中的sys.sysprocesses表查看此信息。

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

最新更新