导读: 如果两个用户进程分别锁定了不同的资源,接着又试图锁定对方所锁定的资源,就会产生死锁。此时, SQL Server数据库 将自动地选择并中止其中一个进程以解除 死锁 ,使得另外一个进程能够继续处理。系统将回退被中止的事务,并向被回退事务的用户发送错误信息。大多数设计良好的应用都会在接收到这个错误信息之后重新提交该事务,此时提交成功的可能性是很大的。但是,如果 服务器 上经常出现这种情况,就会显著地降低服务器性能。由此可知,减少SQL Server数据库死锁是非常有必要的。
为避免死锁,设计应用应当遵循一定的原则 ,包括:
此外,对于SQL Server的死锁问题,下面是几则实践中很有用的小技巧。
如果用户只查看记录但从来不更新它,程序可以什么也不做;反过来,如果用户决定更新某个记录,那么他可以通过一个WHERE子句检查当前的数据是否和以前提取的数据相同,然后执行UPDATE。
类似地,我们还可以检查记录中的时间标识列(如果它存在的话)。如果数据相同,则执行UPDATE操作;如果记录已经改变,则应用应该提示用户以便用户决定如何处理。虽然这种方法需要编写更多的代码,但它能够减少加锁时间和次数,提高应用的整体性能。[适用于6.5,7.0,2000]
这就是我要为大家介绍的减少SQL Server数据库死锁的小技巧,学会了这些技巧,在以后的操作中将会更加方便快捷。
【编辑推荐】
客户要求多台计算机共享一个SQL数据库,当同时访问一个表时会出现死锁问题,导致访问失败,该如何解决?
其实你在查询的时候后面加个nolock条件比如:select * from a where col001=0 nolock就可以了。 。 。
活锁和死锁是怎么回事?

一、活锁如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。 T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。 然后T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求,...,T2有可能永远等待,这就是活锁的情形,如图8.4(a)所示。 避免活锁的简单方法是采用先来先服务的策略。 二、死锁如果事务T1封锁了数据R1,T2封锁了数据R2,然后T1又请求封锁R2,因T2已封锁了R2,于是T1等待T2释放R2上的锁。 接着T2又申请封锁R1,因T1已封锁了R1,T2也只能等待T1释放R1上的锁。 这样就出现了T1在等待T2,而T2又在等待T1的局面,T1和T2两个事务永远不能结束,形成死锁。 1. 死锁的预防在数据库中,产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。 防止死锁的发生其实就是要破坏产生死锁的条件。 预防死锁通常有两种方法:① 一次封锁法一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。 一次封锁法虽然可以有效地防止死锁的发生,但也存在问题,一次就将以后要用到的全部数据加锁,势必扩大了封锁的范围,从而降低了系统的并发度。 ② 顺序封锁法顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。 顺序封锁法可以有效地防止死锁,但也同样存在问题。 事务的封锁请求可以随着事务的执行而动态地决定,很难事先确定每一个事务要封锁哪些对象,因此也就很难按规定的顺序去施加封锁。 可见,在操作系统中广为采用的预防死锁的策略并不很适合数据库的特点,因此DBMS在解决死锁的问题上普遍采用的是诊断并解除死锁的方法。 2. 死锁的诊断与解除① 超时法如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。 超时法实现简单,但其不足也很明显。 一是有可能误判死锁,事务因为其他原因使等待时间超过时限,系统会误认为发生了死锁。 二是时限若设置得太长,死锁发生后不能及时发现。 ② 等待图法事务等待图是一个有向图G=(T,U)。 T为结点的集合,每个结点表示正运行的事务;U为边的集合,每条边表示事务等待的情况。 若T1等待T2,则T1、T2之间划一条有向边,从T1指向T2。 事务等待图动态地反映了所有事务的等待情况。 并发控制子系统周期性地(比如每隔1分钟)检测事务等待图,如果发现图中存在回路,则表示系统中出现了死锁。 DBMS的并发控制子系统一旦检测到系统中存在死锁,就要设法解除。 通常采用的方法是选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有的锁,使其它事务得以继续运行下去。 当然,对撤消的事务所执行的数据修改操作必须加以恢复。
给几个QQ挂机软件?!
TenyQQ(本地挂Q) V0.6 Beta 修正绿色版TenyQQ(本地挂Q)下载介绍:+ 增加挂QQ队列机制,时间段固定不可更改!试用了下觉得超好用,第一时间推荐给大家,希望大家喜欢!! 新增改密码功能。 (亮点!!!) + 增加挂QQ队列机制,时间段固定不可更改。 (亮点!!!)队列1: 00:00-02:30队列2: 03:00-05:30队列3: 06:00-08:30队列4: 09:00-11:30队列5: 12:00-14:30队列6: 15:00-17:30队列7: 18:00-20:30队列8: 21:00-23:30 (因新加入这个功能,之前版本的TenyQQ数据库已经无法使用。 ) + 去掉自定义分割符功能,分割符定为----。 新增格----------------04--------后不添密码表示密码与上一行QQ密码相同,注意----是必需的!(以后添加QQ的格式就这样定了,不再更改!!) + 增加备注功能。 (因新加入这个功能,之前版本的TenyQQ数据库已经无法使用。 ) + 自动回复内容限制200字节。 (因更改这里,之前版本的TenyQQ数据库已经无法使用。 ) + 改动数据内存分配方式为动态分配。 理论挂Q数量提高,内存分配更合理。 + 添加窗口增加 确定后立即登陆 选项。 + 编辑窗口增加 确定后立即重登陆 选项。 + 增加 程序启动后立即自动登陆所有QQ 选项。 + 菜单中增加 保存列表 项。 + 列表无改动时退出程序,不会有任何提示。 + 自定义呼出窗口快捷键。 + 记忆窗口大小。 + 支持列表多选编辑操作。 + 提高二次登陆速度。 + 解决5位6位QQ登陆不正常。 + 解决在线时间超过1000天获取等级错误。 + 挂Q数量仍限制为500,但仍允许开多个TenyQQ,这个限度不再更改
发表评论