2010-07-09 42 views
0

我一直在试图制定一个查询来帮助我自己找出使用SQL Server的资源大量查询/数据库/用户,还没有完全搞定它。我想建立一个查询来完成'mysqladmin processlist'为MySQL所做的事情。是否有相当于'mysqladmin processlist'的SQL Server?

我已经提到this related question,但没有得到我真正需要的东西。我使用sp_whosp_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备忘录,那也会很棒。

回答

2

是否必须与一个存储过程调用来完成? SQL Server Management Studio(该链接适用于快速版,但完整安装的SQL Server已具有该功能)具有“活动监视器”功能,该功能准确列出了您想要的内容。

除此之外,

EXECUTE sp_who2 

给你什么,你问:登录,数据库名,命令,CPUTIME,DiskIO,都在那里......

如果你想确切 SPID正在执行命令,你可以使用

DBCC INPUTBUFFER(spid) 

命令(sp_who2只是告诉你它是否是一个DELETE,SELECT,E tc)

+0

它不一定是一个存储过程调用..事实上,我现在使用活动监视器。但是,我想知道是否有一种方法可以确定正在运行的查询?这样我就知道哪些查询会导致问题。 – sholsapp 2010-07-09 04:03:52

+0

在活动监视器中,您可以右键单击某个进程并选择“详细信息”以获取正在运行的命令。或者'DBCC INPUTBUFFER',就像我刚才提到的那样。 – 2010-07-09 04:07:36

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