产生SQL Server死锁的原因与破解

数据库 SQL Server
本文主要描述的是SQL Server死锁的产生缘由,以及对SQL Server死锁的具体解决方案的描述,以下就是对相关内容的描述。

以下的文章主要向大家讲述的是产生SQL Server死锁的原因与其具体的解决办法,我们大家都知道所有死锁产生的最深层的原因是资源况争,本文就是以举例的方式来对这个问题进行说明。

现象一

一个用户A访问表A(锁住了表A),然后又访问表B,另一个用户B 访问表B(锁住了表B),然后企图访问表A这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B,才能继续,同样用户B要等用户A释放表A才能继续这就SQL Server死锁了。

SQL Server死锁的解决方法:

这种SQL Server死锁是由于你的程序的BUG产生的,除了调整你的程序的逻辑别无他法,仔细分析你程序的逻辑:

1、尽量避免同时锁定两个资源;

2、必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源。

现象二

用户A读一条纪录,然后修改该条纪录,这是用户B修改该条纪录,这里用户A的事务里锁的性质由共享锁企图上升到独占锁(for update),而用户B里的独占锁由于A有共享锁存在所以必须等A释,放掉共享锁,而A由于B的独占锁而无法上升的独占锁也就不可能释放共享锁,于是出现了SQL Server死锁。这种死锁比较隐蔽,但其实在稍大点的项目中经常发生。

解决方法:

让用户A的事务(即先读后写类型的操作),在select 时就是用Update lock

语法如下:

  1. select * from table1 with(updlock) where  

以上的相关内容就是对SQL Server死锁产生的原因及解决办法的介绍,望你能有所收获。 

SQL Server死锁产生的原因及解决办法


上述的相关内容就是对SQL Server死锁产生的原因及解决办法的描述,希望会给你带来一些帮助在此方面。

【编辑推荐】

  1. 实现SQL Server 2005中的模糊查找包并不难
  2. SQL Server数据库如何正确加密?
  3. 如何实现SQL Server临时表的创建?
  4. SQL Server查询优化的好用方案
  5. SQL Server数据库中优化索引的妙招
责任编辑:佚名 来源: 每日经济新闻
相关推荐

2010-07-23 11:35:03

SQL Server置

2010-07-22 10:02:12

SQL Server置

2010-11-09 16:29:39

SQL Server死

2010-07-07 13:58:25

SQL Server死

2010-07-06 10:08:57

SQL Server

2010-08-20 11:28:45

DB2 -964问题

2022-05-11 07:41:55

死锁运算线程

2010-06-30 14:15:08

SQL Server死

2024-01-19 21:55:57

C++编程代码

2010-07-20 10:27:57

SQL Server

2010-07-26 13:33:28

SQL Server

2010-11-09 17:04:20

SQL Server死

2010-09-14 15:34:29

sql server死

2010-11-09 17:02:43

SQL Server死

2011-04-02 17:08:44

SQL Server死锁

2010-07-23 09:44:51

2014-03-17 10:34:48

SQL Server

2010-11-09 16:37:25

Sql server死

2010-11-09 16:20:46

SQL Server死

2010-07-02 10:42:11

SQL Server
点赞
收藏

51CTO技术栈公众号