• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

『C#基础』数据库死锁笔记

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

所谓的死锁,主要是由于进程B要访问进程A所在的资源,而进程A又由于种种原因,不释放掉其所占用的资源,所以数据库就会一直处于阻塞状态。

四个必要条件:

必要条件:互斥,一个资源,在同一时间点上,只能由一个进程访问。

死锁分析:当任务TA在使用资源RA的时候,产生了未预知的问题,从而意外的停止了执行,但是还没有释放RA,所以就造成的对资源RA的死锁,这个也是死锁产生最根本的原因,其他的原因基本上都是由这个为基础的。

必要条件:资源的请求与保持,每一个进程都可以在使用一个资源的同时,申请访问另一个资源。

死锁分析:由于每一个进程都可以申请访问多个资源,所以当任务TA使用资源RA的时候,申请访问正在被任务TB使用的资源RB,而此时,TB要申请正在被TA使用的RA,所以就造成了互相等待的情况,从而死锁。

必要条件:资源的非剥夺,进程无法将正在被其他进程使用的资源强行剥夺过来。

死锁分析:当产生其他情况的时候,正是由于这个条件,从而造成的进程的无止境等待。

必要条件:资源的循环等待

死锁分析:TA申请RA,而TB正在使用RA,同时TB申请RB,但TC正在使用RB,此时TC申请RC,而RC正在被TA使用,从而产生死锁。

可能产生死锁的资源

  1. RID,堆中的单行
  2. KEY,索引中的键,行锁
  3. PAG,页
  4. EXT,区结构
  5. HOBT,堆或B树
  6. TAB,表,包括数据和索引
  7. File,数据库文件
  8. APP,应用程序专用资源
  9. METADATA,元数据
  10. Allocation_Unit,分配单元
  11. DB,整个数据库

避免产生死锁的方法

由于死锁是因为上述的四个必要条件共同作用所产生的,所以按照一般的思路,只要能够打破其中一个,就可以有效的避免死锁的产生。

下面是针对四个必要条件所可以作出的处理:

  1. 允许资源的并发访问。
  2. 允许进程的资源剥夺。
  3. 进程远行所需资源一次提交。
  4. 资源的有序分配,也就是按同一顺序访问资源。

 

其他方法(这些方法的主要目标是使资源的占用时间最小化,从而降低死锁的产生机会):

  1. 避免事务中的用户交互。
  2. 保持事务中简短并处于一个批处理中。
  3. 使用较低级别的隔离级别。
  4. 使用基于行版本控制的隔离级别。
  5. 使用绑定连接,及将多个会话绑定到一个事务中,这样可以有效的减少事务的数量。

 

 

主要参考文章:

  1. http://www.cnblogs.com/happyhippy/archive/2008/11/14/1333922.html        「强烈推荐」
  2. http://msdn.microsoft.com/zh-cn/library/ms177433.aspx                                   「MSDN」
  3. http://www.cnblogs.com/ching/archive/2012/02/01/2334659.html                   「很详细的另一篇

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#语言Winform防SQl注入做用户登录的例子发布时间:2022-07-13
下一篇:
[转][C#]AutoFac使用方法总结发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap