1.如题
2.代码
create proc [dbo].[p_lockinfo]
@kill_lock_spid bit=1, --是否杀掉死锁的进程,1 杀掉, 0 仅显示
@show_spid_if_nolock bit=1 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0 不显示
as
declare @count int,@s nvarchar(1000),@i int
select id=identity(int,1,1),标志,
进程ID=spid,线程ID=kpid,块进程ID=blocked,数据库ID=dbid,
数据库名=db_name(dbid),用户ID=uid,用户名=loginame,累计CPU时间=cpu,
登陆时间=login_time,打开事务数=open_tran, 进程状态=status,
工作站名=hostname,应用程序名=program_name,工作站进程ID=hostprocess,
域名=nt_domain,网卡地址=net_address
into #t from(
select 标志='死锁的进程',
spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=a.spid,s2=0
from master..sysprocesses a join (
select blocked from master..sysprocesses group by blocked
)b on a.spid=b.blocked where a.blocked=0
union all
select '|_牺牲品_>',
spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=blocked,s2=1
from master..sysprocesses a where blocked<>0
)a order by s1,s2
select @count=@@rowcount,@i=1
if @count=0 and @show_spid_if_nolock=1
begin
insert #t
select 标志='正常的进程',
spid,kpid,blocked,dbid,db_name(dbid),uid,loginame,cpu,login_time,
open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address
from master..sysprocesses
set @count=@@rowcount
end
if @count>0
begin
create table #t1(id int identity(1,1),a nvarchar(30),b Int,EventInfo nvarchar(255))
if @kill_lock_spid=1
begin
declare @spid varchar(10),@标志 varchar(10)
while @i<=@count
begin
select @spid=进程ID,@标志=标志 from #t where id=@i
insert #t1 exec('dbcc inputbuffer('+@spid+')')
if @标志='死锁的进程' exec('kill '+@spid)
set @i=@i+1
end
end
else
while @i<=@count
begin
select @s='dbcc inputbuffer('+cast(进程ID as varchar)+')' from #t where id=@i
insert #t1 exec(@s)
set @i=@i+1
end
select a.*,进程的SQL语句=b.EventInfo
from #t a join #t1 b on a.id=b.id
end
GO
exec p_lockinfo 1,1
生成存储过程后直接执行。
分享到:
相关推荐
"SQL Server死锁的解除方法" SQL Server死锁是指在多个事务之间的资源竞争时,出现的循环等待资源的现象。死锁会导致系统性能下降,甚至会导致系统崩溃。因此,解决SQL Server死锁是非常重要的。 SQL Server死锁的...
SQL Server 2005引入了新的处理机制,使得开发者可以通过T-SQL捕获并处理这些异常,从而更有效地解决死锁问题。 在SQL Server 2000中,当事务遇到异常,如死锁,T-SQL脚本会立即停止执行,使得对死锁的处理变得困难...
SQL Server死锁是数据库系统中常见的问题,它发生在两个或多个事务之间,因为它们相互等待对方释放资源,导致事务无法继续执行。理解死锁的原因和解决策略对于优化数据库性能至关重要。 首先,我们要深入理解死锁的...
### SQL Server 死锁排查与解决方法 #### 一、SQL Server Profiler 监控数据库死锁 在处理SQL Server数据库中的死锁问题时,一个非常实用的工具就是SQL Server Profiler。它可以帮助我们捕捉到数据库运行过程中的...
本文将详细介绍如何在SQL Server中快速查询并解决死锁问题。 首先,我们要检查是否有未提交的事务。未提交的事务可能会导致阻塞其他事务,进一步引发死锁。以下是一段SQL查询语句,用于找出所有未提交事务的详细...
本文将深入探讨SQL Server死锁的概念、原因、检测方法以及如何有效地解决和预防死锁。 1. **死锁的概念** 死锁是系统资源分配的一种状态,其中两个或更多的事务相互等待对方释放资源,形成一个循环等待链,导致...
### SQL Server死锁总结 #### 一、死锁原理 死锁是计算机系统中常见的问题之一,特别是在数据库管理系统中,由于并发控制不当可能导致系统性能下降甚至完全停止响应。在SQL Server中,死锁指的是两个或多个事务...
分析死锁报告后,可能的解决方案包括: - 优化事务逻辑,减少长时间持有锁的时间。 - 调整事务隔离级别,例如从串行化降低到读已提交。 - 设计更合理的数据结构和索引,以减少锁定冲突。 - 使用资源排序列表...
### SQL Server死锁查询知识点详解 #### 一、SQL Server中的死锁概念 在SQL Server中,当两个或多个事务互相等待对方释放资源时就会发生死锁。这通常发生在两个或更多的事务请求锁定同一资源的不同部分(如行、页...
SQL Server提供了多种工具和方法来检测和分析死锁,以便管理员能够及时发现并解决问题。本文将详细介绍如何在SQL Server中分析死锁进程,特别是如何通过存储过程来捕捉和分析死锁信息。 ### 死锁分析存储过程 在...
/**//*--调用示例 exec p_lockinfo 0,1 --*/ create proc p_lockinfo @kill_lock_spid bit=1, --是否杀掉死锁的进程,1 杀掉...@show_spid_if_nolock bit=1 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0 不显示
#### SQL Server 死锁解决方案 除了使用存储过程检测死锁之外,还可以采取以下措施来预防和解决死锁问题: - **调整事务隔离级别**:通过设置更低的事务隔离级别可以减少锁的使用,降低死锁的可能性。 - **锁定...
本节将详细介绍如何检测 SQL Server 中的死锁,并提供一种实用的解决方案来处理这些死锁问题。 ##### 1. 检测死锁 在 SQL Server 中,可以通过多种方式检测到死锁的发生: - **SQL Server 自动报告**:当 SQL ...
在死锁发生时,SQL Server的数据库引擎具有内置的死锁解决机制,即当检测到死锁时,会自动选择一个事务进行回滚以释放锁,让其他事务能够继续执行。开发者在编写应用程序时,也需要考虑到死锁的情况,合理设计事务...
以及SQL Server中的事务管理,包括读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)隔离级别,同时可能涉及死锁问题及解决方案。 通过学习这本书...
本文总结了 SQL Server 死锁的原理、示例和解决方法。了解死锁的原理是解决死锁的关键,我们可以通过避免死锁的四个必要条件,来规避死锁的发生。同时,使用 sp_who 和 sp_lock 等系统存储过程,可以帮助我们排查和...
"SQLServer自动杀死死锁进程"这一话题旨在探讨如何配置SQL Server来自动检测并解决这些死锁情况,以避免系统阻塞和性能下降。 1. **死锁的基本概念**: 死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一...
以下是对“SQLSERVER谈死锁的监控分析解决思路共8页.pdf”这一主题的详细探讨。 1. **死锁定义与产生条件**: - **循环等待**:在死锁中,存在一个事务集合,每个事务都在等待另一个事务释放资源。 - **不可抢占...
在SQL Server 2005中,你可以利用BEGIN TRANSACTION、COMMIT和ROLLBACK语句来管理事务,理解并发控制(如锁机制)和死锁解决方案也是必备技能。 备份和恢复是数据库管理的重要环节。SQL Server 2005提供了多种备份...