为什么在sql server中引入死锁机制?

为什么出现死锁现象?如何解决死锁现象?... 为什么出现死锁现象?如何解决死锁现象? 展开
 我来答
baiynijecym
2012-12-15 · TA获得超过1841个赞
知道大有可为答主
回答量:1411
采纳率:66%
帮助的人:1170万
展开全部
前面两位兄弟回答的不是死锁,是正常的锁定。

死锁是这样形成的,假设有两个事物A和B
A事物在执行中需要更新两个表,假设为T1,T2,此时A已执行完T1,正在申请使用T2.
B事物也需要更新这两个表,但B事物先执行了T2,正在申请使用T1,
因为T1已被A事物锁定,所以B必须等待A事物执行完后释放锁,但A事物此时正在申请T2,而T2确被B事物先锁定了,需等待B事物完成后释放锁后才可获得T2的锁,此时死锁就发生了,如果没有死锁机制,这两个事物就会一直等下去。
sql server会定期检查死锁,如果发现死锁,就会权衡两个事物,牺牲掉其中一个执行代价较小的事物,使另一个事物能继续执行。

要避免死锁的发生,有很多需要注意的,如
1.保持事物尽可能的简短。
2。事物更新的顺序尽量一致,如上例中A和B如果更新顺序都为T1,T2或T2,T1的话就不会发生死锁了。
3.可以修改锁的粒度,如页锁改为行锁
百度网友52d7628
2012-12-14
知道答主
回答量:22
采纳率:0%
帮助的人:14.9万
展开全部
你正在使用的资源被占用就出现死锁
SQL Server的话 sp_who2查看那死锁 kill ID 杀死进程 释放资源
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
食菜牛
2012-12-15 · 超过12用户采纳过TA的回答
知道答主
回答量:40
采纳率:0%
帮助的人:20.6万
展开全部
这就是sql server 的特性,当一个服务在占用数据库资源的时候,另一个服务就不能对数据库进行操作,否则就会出现死锁。这也是对数据库安全的保护,想要解决死锁也很简单,用sp_who2查看该死锁,用kill ID 杀死进程释放被占用的资源,如果在oracle里就是直接在sqlplus里敲rollback了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式