同事的程序中,经常发生的情况是:在程序运行过程中,突然无缘无故的停住了,没有在继续运行下去。后来经过调试发现是因为数据库发生了死锁。对于数据库的死锁,不是很明白,google了下,查到一些资料。
地址:http://www.cnblogs.com/xzq686/archive/2008/04/24/1168784.html
表现一:
一个用户A 访问表A(锁住了表A),然后又访问表B
另一个用户B 访问表B(锁住了表B),然后企图访问表A
这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B,才能继续,好了他老人家就只好老老实实在这等了
同样用户B要等用户A释放表A才能继续这就死锁了
解决方法:
这种死锁是由于你的程序的BUG产生的,除了调整你的程序的逻辑别无他法
仔细分析你程序的逻辑,
1:尽量避免同时锁定两个资源
2: 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源.
表现二:
用户A读一条纪录,然后修改该条纪录
这是用户B修改该条纪录
这里用户A的事务里锁的性质由共享锁企图上升到独占锁(for update),而用户B里的独占锁由于A有共享锁存在所以必须等A释
放掉共享锁,而A由于B的独占锁而无法上升的独占锁也就不可能释放共享锁,于是出现了死锁。
这种死锁比较隐蔽,但其实在稍大点的项目中经常发生。
解决方法:
让用户A的事务(即先读后写类型的操作),在select 时就是用Update lock
语法如下:
select * from table1 with(updlock) where ....
如果真的table被锁住了,可以通过下面的方法来解锁:
Sql server企业管理器->对应的数据库->管理->当前活动->锁/进程ID
将对应的被锁住的进程关闭。
还有一种方法,就是在你不知道究竟是哪张表被锁,由何种原因被锁,可以重新启动数据库来解决,但不保证下次又被锁住,因为还没有找到问题的根本原因。
要避免锁表,在操作数据库最好不要用独占方式。
分享到:
相关推荐
9. **监控和日志记录**:通过SQL Server的系统日志或专门的工具监控死锁事件,记录死锁信息,以便分析死锁模式并针对性地调整应用程序或数据库配置。 总的来说,解决SQL Server中的死锁问题需要综合考虑数据库设计...
HIS系统SQL Server数据库死锁问题的分析与解决 SQL Server数据库是HIS系统中非常重要的一部分,负责存储和管理大量的医疗数据。然而,在实际应用中,SQL Server数据库可能会出现死锁问题,导致系统性能下降, thậm...
标题与描述均指出本篇讨论的主题是“查询SQL Server数据库死锁存储过程”。这表明文章旨在介绍一个用于检测SQL Server环境中发生的死锁现象的自定义存储过程。 #### 标签解读 标签“SQL死锁”进一步强调了本文将...
根据提供的文件信息,我们可以推断出这是一份关于SQL Server 2000数据库系统管理与维护的学习资料,包括了第1至42节的内容。接下来,我们将详细地阐述SQL Server 2000数据库系统管理与维护的核心知识点。 ### SQL ...
在SQL Server数据库管理中,死锁是一个常见的性能问题,它发生在两个或多个事务相互等待对方释放资源时。本文将深入探讨如何使用SQL Server Profiler工具来监视和分析死锁,以便更好地理解和解决这类问题。 首先,...
本文将深入探讨“sql数据库死锁查询工具”及其在解决数据库死锁和阻塞过程中的作用。 **1. SQL死锁** SQL死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一种相互等待的现象,若无外力干涉,它们都将无法...
在IT领域,数据库是至关重要的组成部分,而SQL Server 2000作为一款经典的关系型数据库管理系统,由Microsoft公司推出,被广泛应用于企业级数据存储和管理。本教程"SQL Server 2000数据库开发从零开始"旨在帮助初学...
在IT领域,尤其是在数据库管理与优化中,理解并解决SQL Server数据库中的死锁问题是一项至关重要...通过以上方法和技术,可以有效地检测、分析和解决SQL Server数据库中的死锁问题,从而保障数据库系统的稳定性和性能。
因此,解决SQL Server死锁是非常重要的。 SQL Server死锁的查询方法有多种,下面列举了几种常见的方法: 1. 使用exec master..xp_lockinfo 0, 0命令来查询死锁的进程信息。 2. 使用exec master..xp_lockinfo 1, 0...
在探讨SQL Server数据库中死锁产生的原因及其解决方法之前,首先要了解死锁的基本概念。死锁是指在多线程系统中,两个或多个线程之间形成了循环依赖关系,导致它们都在等待对方释放资源,从而都无法继续执行下去的一...
在处理SQL Server数据库中的死锁问题时,一个非常实用的工具就是SQL Server Profiler。它可以帮助我们捕捉到数据库运行过程中的各种事件,并通过这些事件分析问题发生的根源。下面我们将详细介绍如何使用SQL Server ...
SQL Server 2000是微软公司推出的一款关系型数据库管理系统,它在企业级数据存储、管理和分析方面具有广泛的应用。本书深入浅出地讲解了SQL Server 2000的核心概念、功能和操作技巧,适合初学者和有一定基础的学习者...
《SQL Server 2000 数据库应用教程》是一份专为学习和理解SQL Server 2000设计的教学资料,通常以PPT形式呈现,旨在帮助用户掌握这个经典数据库管理系统的基本概念、功能以及实际应用。SQL Server 2000是微软公司...
在SQL Server数据库管理系统中,死锁是一个常见的性能问题,它发生在两个或多个事务相互等待对方释放资源,导致它们都无法继续执行。死锁不仅影响数据库的正常运行,还可能导致数据一致性问题。本文将详细介绍如何在...
《SQLServer2016数据库管理与开发项目教程(微课版)》是一份全面介绍SQL Server 2016数据库管理系统的学习资源,主要针对数据库管理和开发人员进行深入讲解。这个压缩包包含了丰富的实训课件,旨在帮助学习者通过...
以上知识点涵盖了SQL Server 2000数据库程序设计中的一些核心概念和技术,包括数据打包与传输、死锁优先级设置、索引调整与性能优化、唯一订单号生成、数据库设计优化等方面。这些知识点对于理解和掌握SQL Server ...
在SQL Server数据库管理中,死锁是一个常见的问题,它发生在两个或多个事务相互等待对方释放资源,从而导致所有事务都无法继续执行的情况。SQL Server提供了多种工具和方法来检测和分析死锁,以便管理员能够及时发现...
SQL Server 2000是微软公司推出的一款关系型数据库管理系统,它是基于标准的SQL(结构化查询语言)并提供了一整套完善的数据存储、管理和分析解决方案。在2000版本中,SQL Server引入了诸多新特性,如改进的性能、...
### SQL Server 并发分析及解决办法 #### 一、并发问题概述 在现代数据库管理系统中,尤其是在SQL Server这样的企业级数据库系统中,并发管理是一个非常关键的话题。并发指的是多个事务或查询同时运行的情况,这...
《SQLServer2016数据库原理及应用》是一门深入探讨SQL Server 2016这一强大数据库管理系统的基础与高级特性的课程。本课程重点在于理解数据库的基本概念、设计原则以及在实际工作中的应用,同时涵盖了SQL Server ...