检索SQL Server 数据库阻塞【转】
精选 转载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
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
sql server 数据库日志还原
角色是一个权限的集合,只要将用户加入到角色成员(给用户分配一个角色),就可以给这个用户分配这个角色所具有的全部权限。角色的出现极大的简化了权限的管理。
服务器角色 数据库角色 用户定义数据库角色 架构