Create
Proc [Dbo].[Auto_Checkblocks] AS
Set
Nocount On
If
Exists ( Select * From Master..Sysprocesses Where Blocked <> 0 )
Begin
/**//* Show Top Blockers, But No Duplicates */
Select '
请尝试使用
KILL [SPID]
来杀进程
'
-- Select '
请尝试使用
SP_LOCK [SPID]
来显示锁信息,用
OBJECT_NAME(ID)
来显示锁对象名称或用
Sp_Who [SPID]
来显示信息
'
-- Select '
在使用
OBJECT_NAME
显示对象名称时请注意对应的
Db_Id'
Select '
以下是引起阻塞的语句
'
Select Distinct
'
进程
ID'
= Str( A.Spid, 4 ),
'
进程
ID
状态
'
= Convert( Char(10), A.Status ),
'
分块进程的进程
ID'
= Str( A.Blocked, 2 ),
'
工作站名称
'
= Convert( Char(10), A.Hostname ),
'
执行命令的用户
'
= Convert( Char(10), Suser_Name( A.Uid ) ),
'
数据库名
'
= Convert( Char(10), Db_Name(A.Dbid ) ),
'
应用程序名
'
= Convert( Char(10), A.Program_Name ),
'
正在执行的命令
'
= Convert( Char(16), A.Cmd ),
'
累计
CPU
时间
'
= Str( A.Cpu, 7 ),
'IO' = Str( A.Physical_Io, 7 ),
'
登录名
'
= A.Loginame,
'
执行语句
'
=
B
.
Text
From Master..Sysprocesses A
Cross Apply Sys.Dm_Exec_Sql_Text(A.Sql_Handle) B
Where Spid In ( Select Blocked From Master..Sysprocesses )
And Blocked = 0
Order By Str(Spid,4)
/**//*
显示阻塞牺牲品
*/
Select '
以下是被阻塞的等待执行的语句
'
Select
'
进程
ID[SPID]'
= Str( A.Spid, 4 ),
'
进程
ID
状态
'
= Convert( Char(10), A.Status ),
'
分块进程的进程
ID'
= Str( A.Blocked, 2 ),
'
工作站名称
'
= Convert( Char(10), A.Hostname ),
'
执行命令的用户
'
= Convert( Char(10), Suser_Name( A.Uid ) ),
'
数据库名
'
= Convert( Char(10), Db_Name( A.Dbid ) ),
'
应用程序名
'
= Convert( Char(10), A.Program_Name ),
'
正在执行的命令
'
= Convert( Char(16), A.Cmd ),
'
累计
CPU
时间
'
= Str( A.Cpu, 7 ),
'IO' = Str( A.Physical_Io, 7 ),
'
登录名
'
= A.Loginame,
'
执行语句
'
=
B
.
Text
From Master..Sysprocesses A
Cross Apply Sys.Dm_Exec_Sql_Text(A.Sql_Handle) B
Where Blocked <> 0
Order By Spid
End
Else
Begin
Select '
恭喜!当前没有阻塞,当前的进程信息如下
.'
,
Convert (Char(24),Getdate(),13)
Select
'
进程
ID'
= Str( Spid, 4 ),
'
进程
ID
状态
'
= Convert( Char(10), Status ),
'
分块进程的进程
ID'
= Str( Blocked, 2 ),
'
工作站名称
'
= Convert( Char(10), Hostname ),
'
执行命令的用户
'
= Convert( Char(10), Suser_Name( Uid ) ),
'
数据库名
'
= Convert( Char(10), Db_Name( Dbid ) ),
'
应用程序名
'
= Convert( Char(10), Program_Name ),
'
正在执行的命令
'
= Convert( Char(16), Cmd ),
'
累计
CPU
时间
'
= Str( Cpu, 7 ),
'IO' = Str( Physical_Io, 7 ),
'
登录名
'
= Loginame
From Master..Sysprocesses
Where Blocked = 0
Order By Spid
End
Return
Go