我一直在尝试制定一个查询来帮助自己识别使用SQL Server的资源密集型查询/数据库/用户,并且还没有完成它。我想构建一个查询,它将执行'mysqladmin processlist'将为MySQL做的事情。
我提到了this related question,但还没有得到我真正需要的东西。我正在使用sp_who
,sp_who2
和类似的查询:
select master.dbo.sysprocesses.loginame,
count(master.dbo.sysprocesses.loginame)
from master.dbo.sysprocesses
group by master.dbo.sysprocesses.loginame
问题始终是这些工具之一并没有给我我需要的一切。我的目标是获得这种格式的查询:
LOGIN, DATABASE, QUERY, CPU, MEM, etc.
如果有人知道如何做到这一点,我将不胜感激。如果有人有任何SQL Server DBA备忘单也会很棒。
答案 0 :(得分:2)
是否必须使用sproc调用? SQL Server Management Studio(该链接适用于快速版,但完整安装的SQL Server已经拥有它)具有“活动监视器”功能,可以准确列出您想要的内容。
除此之外,
EXECUTE sp_who2
准确地告诉您所要求的内容:登录,DBName,Command,CPUTime,DiskIO都在那里......
如果您想要执行SPID的完全命令,可以使用
DBCC INPUTBUFFER(spid)
命令(sp_who2
只是告诉你它是否是DELETE,SELECT等)
答案 1 :(得分:1)
如果您淘汰sp_who2
,则可以提取您感兴趣的字段:
select
spid
,status
,hostname
,program_name
,cmd
,cpu
,physical_io
,blocked
,dbid
,convert(sysname, rtrim(loginame))
as loginname
from sys.sysprocesses with (nolock)
order by cpu desc