最近我在弄数据库大批时间时,由于时间太长,我就中断了,中断后我先是update看到没有反映,又select,还是不出来,最后delete还是没反映,开始意识到可能是自己太心急了,然后就在一边等,但是五分钟过去了没有反映,十分钟过去了还是没有反映,网上查了查,可能是是数据库死锁了,解开死锁的方法有两个,一个是重启数据库,二就是用kill杀死死锁的进程,但是怎么知道哪个进程死锁了呢?最后还是网上找到了,别人写的存储过程,可以查看数据库死锁的进程,在这里和大家分享一下。
CREATE procedure [dbo].[sp_who_lock]
as
begin
declare @spid int,@bl int,
@intTransactionCountOnEntry int,
@intRowcount int,
@intCountProperties int,
@intCounter int
create table #tmp_lock_who (id int identity(1,1),spid smallint,bl smallint)
IF @@ERROR<>0 RETURN @@ERROR
insert into #tmp_lock_who(spid,bl) select 0 ,blocked
from (select * from master..sysprocesses where blocked>0 ) a
where not exists(select * from (select * from master..sysprocesses where blocked>0 ) b
where a.blocked=spid)
union select spid,blocked from master..sysprocesses where blocked>0
IF @@ERROR<>0 RETURN @@ERROR
-- 找到临时表的记录数
select @intCountProperties = Count(*),@intCounter = 1
from #tmp_lock_who
IF @@ERROR<>0 RETURN @@ERROR
if @intCountProperties=0
select '现在没有阻塞和死锁信息' as message
-- 循环开始
while @intCounter <= @intCountProperties
begin
-- 取第一条记录
select @spid = spid,@bl = bl
from #tmp_lock_who where id = @intCounter
begin
if @spid =0
select '引起数据库死锁的是: '+ CAST(@bl AS VARCHAR(10)) + '进程号,其执行的SQL语法如下'
else
select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下'
DBCC INPUTBUFFER (@bl )
end
-- 循环指针下移
set @intCounter = @intCounter + 1
end
drop table #tmp_lock_who
return 0
end
GO
分享到:
相关推荐
原理: 利用ms sql server 的系统存储过程sp_who来列表整个系统进程,并通过blk字段来获得当前是否有进程互相等候,然后找到影响到整个源头的进程并调用kill来取消它。整个系统非常简单。因为调用的系统存储过程是...
除了解决 SQL 表死锁问题外,还可以使用其他 SQL 语句来查询当前活动的锁管理器资源信息和数据库进程信息。 1. 查询当前活动的锁管理器资源信息: SELECT resource_type ' 资 源 类 型 ',request_mode ' 请 求 模 ...
在数据库管理系统中,查询优化一直是一项至关重要且复杂的工作。本文主要探讨了Microsoft SQL Server中的查询优化技术,以及影响其...通过综合运用这些技术和工具,可以有效地提升SQL Server数据库的性能和响应速度。
22. **@@SERVICENAME**:表明SQL Server正在运行的服务模式,比如MS SQLServer、MSDTC或SQLServerAgent。 23. **@@SPID**:返回当前会话的服务器进程ID,对于跟踪和解决问题很有帮助。 24. **@@TEXTSIZE**:设置或...
原理: 利用ms sql server 的系统存储过程sp_who来列表整个系统进程,并通过blk字段来获得当前是否有进程互相等候,然后找到影响到整个源头的进程并调用kill来取消它。 整个系统非常简单。因为调用的系统存储过程...
在MS-SQL Server中,常见的锁模式包括: - 共享(S)锁,用于只读操作,允许并发事务读取数据,但阻止其他事务修改。 - 更新(U)锁,用于可更新的资源,防止死锁,允许读取但不立即修改。 - 排它(X)锁,用于数据修改,...
在SQL Server数据库管理系统中,死锁是一个常见的问题,它发生在两个或多个进程因为争夺资源而陷入互相等待的状态,无法继续执行。理解死锁的原因和解决方法对于确保数据库系统的正常运行至关重要。 **一、死锁的...
SQL Server 通过检测死锁并在必要时回滚某个事务来解决这一问题。 3. **隔离级别**:SQL Server 支持四种事务隔离级别:`READ UNCOMMITTED`、`READ COMMITTED`、`REPEATABLE READ` 和 `SERIALIZABLE`。不同的隔离...
### MS_SQL_Server查询优化方法...通过上述方法的综合运用,可以有效地解决MS_SQL_Server查询慢的问题,大幅提升数据库性能。在实际应用中,还需要结合具体的业务场景和技术环境灵活调整优化策略,确保达到最佳效果。
**MSSQL连接器**是用于与Microsoft SQL Server进行交互的一种工具或库,它使得开发者或者用户能够方便地建立、管理以及执行SQL查询到MSSQL数据库中。这个连接器通常包含了驱动程序和支持代码,允许应用程序与SQL ...
死锁是指在数据库系统中,两个或多个进程互相等待对方释放资源,形成一种循环依赖,使得每个进程都无法继续前进。例如,进程A等待进程B持有的资源,而进程B又在等待进程A释放的资源,这就形成了死锁。 ### 二、死锁...
SQL Server 是一款广泛使用的数据库管理系统,其性能优化是确保高效数据处理的关键。本文将详细解析SQL Server中的几个关键性能指标,帮助你理解如何监控和优化数据库的运行。 1. **访问方法(Access Methods)**: ...
3. **MS SQL Server数据库实体完整性约束**:通常使用主键约束来保证,主键约束确保每条记录都有唯一的标识符,并防止插入重复值。 4. **内存存储组织结构**:常见的有线性地址空间、分页存储、分段存储、段页式...
通过对上述性能指标的理解与监控,可以有效地提升SQL Server数据库的性能。值得注意的是,不同数据库系统之间可能存在差异,因此对于Oracle和DB2等其他数据库,也需要了解其特有的监控参数和最佳实践。此外,除了...
在 MS SQL_Server 数据库中,可以通过以下约束来保证数据库的实体完整性: * 主键约束:确保每个表中的每一行数据都是唯一的。 * 唯一约束:确保每个表中的每一列数据都是唯一的。 * 检查约束:确保每个表中的每一...
MS SQL Server 是数据库管理系统,而非操作系统。 9. A. 顺序存取、直接存取和索引存取是常见文件存取方式。 10. B. 计算机系统安全要求包括真实性,确保信息来源的真实性。 其他知识点: 1. 临界区是指进程中...
28.SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号 答:Select ID FROM table1 Where ...
超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。...