我正在看sp_who2,好像所有进程都处于睡眠模式,而我们的网站速度非常慢。如果sp_who2只查看当前数据库,或者查看另一个数据库可能导致问题而sp_who2只查看当前数据库,那我就在徘徊。
还有一种方法可以检测sql进程是否以更高的优先级运行并阻止其他进程。当我运行sp_who2时,我们有几个通常处于可运行状态的进程,但它们都处于休眠状态,我试图找出阻塞它们的内容。很高兴检测一个进程是否阻止了其他sql进程。
还有一个BlkBy列,我们设置相同的进程ID为77,我认为这意味着阻止所有其他进程,但我不确定。有谁知道BlkBy的意思?
我把asterics ** **放在了我认为是罪魁祸首的地方。有没有办法改变优先级或阻止,所以它不再阻止。 THX
SPID Status Login HostName BlkBy DBName Command CPUTime DiskIO LastBatch ProgramName SPID
76 sleeping db\uname UNAME . db AWAITING COMMAND 0 0 02/24 09:15:54 srv / db 76
77 sleeping db\uname UNAME . db SELECT 705422 0 02/24 09:25:49 srv / db 77
77 sleeping db\uname UNAME . db SELECT 16 0 02/24 09:25:49 srv / db 77
77 sleeping db\uname UNAME **77** db SELECT 32 0 02/24 09:25:49 srv / db 77
77 sleeping db\uname UNAME **77** db SELECT 31 0 02/24 09:25:49 srv / db 77
77 sleeping db\uname UNAME . db SELECT 16 0 02/24 09:25:49 srv / db 77
感谢。
答案 0 :(得分:1)
sp_who2
将显示整个服务器连接
对于锁定,请参阅
exec sp_locks
详细了解谁阻止谁:
set nocount on
create table #t_sql (EventType text, Parameters int,EventInfo text, spid smallint default(0))
declare @qs_blocking_list table (
spid int,
blocked int,
loginame sysname,
nt_username sysname,
lastwaittype sysname,
waitresource sysname,
status sysname,
waittime bigint,
program_name sysname,
cmd sysname,
cpu bigint,
physical_io bigint,
hostname sysname,
dbid int
)
insert into @qs_blocking_list (
spid ,
blocked ,
loginame,
nt_username ,
lastwaittype ,
waitresource ,
status ,
waittime ,
program_name ,
cmd ,
cpu ,
physical_io ,
hostname ,
dbid
)
select
spid ,
blocked ,
loginame,
nt_username ,
lastwaittype ,
waitresource ,
status ,
waittime ,
program_name ,
cmd ,
cpu ,
physical_io ,
hostname ,
dbid
from master.dbo.sysprocesses
delete from @qs_blocking_list
where not ( blocked <> 0 or (spid in (select blocked from @qs_blocking_list)) )
declare @spid smallint
declare @sql nvarchar(255)
set @spid = 0
while 1=1
begin
select @spid = min(spid) from @qs_blocking_list where @spid<spid
if @spid is null
break
set @sql = 'dbcc inputbuffer ('+convert(nvarchar(20),@spid)+')'
insert into #t_sql (EventType, Parameters, EventInfo)
exec (@sql)
update #t_sql set spid = @spid where spid = 0
end
set nocount off
select b.spid as 'spid'
, blocked as 'BlockedBySPID'
, rtrim(loginame) as 'SQLUser'
, rtrim(nt_username) as 'NTUser'
, rtrim(lastwaittype) as 'Type'
, rtrim(waitresource) as 'Resource'
, rtrim(status) +
case when blocked > 0 then ' and blocked' else '' end +
case when b.spid in (select blocked from @qs_blocking_list) then ' and blocking' else '' end as 'Status'
, waittime as 'WaitTimeMS'
, rtrim(program_name) as 'Program'
, rtrim(cmd) as 'Command'
, cpu as 'CPU'
, physical_io as 'PhysicalIO'
, rtrim(hostname) as 'HostName'
, case
when dbid = 0 then ''
else
db_name(dbid)
end as 'DBName'
, isnull(sql.EventInfo,'/* SQL Text not available */') as 'sql_text'
from @qs_blocking_list b
left outer join #t_sql sql on b.spid = sql.spid
drop table #t_sql