0

0

sqlserver 死锁笔记(转)

php中文网

php中文网

发布时间:2016-06-07 15:33:35

|

1165人浏览过

|

来源于php中文网

原创

所谓的死锁,主要是由于进程B要访问进程A所在的资源,而进程A又由于种种原因,不释放掉其所占用的资源,所以数据库就会一直处于阻塞状态。 四个必要条件: 必要条件: 互斥,一个资源,在同一时间点上,只能由一个进程访问。 死锁分析:当任务TA在使用资源RA

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

四个必要条件:

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

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

sqlserver 死锁笔记(转)

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

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

sqlserver 死锁笔记(转)

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

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

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

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

Codiga
Codiga

可自定义的静态代码分析检测工具

下载

sqlserver 死锁笔记(转)

可能产生死锁的资源

  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                   「很详细的另一篇」

相关专题

更多
Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

37

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

37

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

45

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP入门到实战消息队列RabbitMQ
PHP入门到实战消息队列RabbitMQ

共22课时 | 1.3万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.4万人学习

SQL优化与排查(MySQL版)
SQL优化与排查(MySQL版)

共26课时 | 2.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号