sqlserver 死锁笔记(转)

所谓的死锁,主要是由于进程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. 使用绑定连接,及将多个会话绑定到一个事务中,这样可以有效的减少事务的数量。

转自http://www.cnblogs.com/sitemanager/archive/2012/03/26/2417638.html

主要参考文章:

  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                   「很详细的另一篇」
时间: 2024-11-07 01:40:08

sqlserver 死锁笔记(转)的相关文章

SQLServer学习笔记系列6

一.写在前面的话 时间是我们每个人都特别熟悉的,但是到底它是什么,用什么来衡量,可能很多人会愣在那里.时间可以见证一切,也可以消磨一切,那些过往的点点滴滴可思可忆.回想往年清明节过后,在家乡的晚上总能听见阵阵的青蛙叫声,那是清脆的叫声,那是家乡的味道.时间一转眼,貌似那些日子已离我远去好久,在城市的喧嚣浮华中,找寻不到那种内心的宁静.感叹时间流逝的同时,怀念过去的点点滴滴.我想在繁华的都市中寻找一种安定的心情来学习,或许是一种不错的方式.学习才会让我们认清自己,找回自我,做内心的强者,不骄不躁,

SQLServer学习笔记系列5

一.写在前面的话 转眼又是一年清明节,话说“清明时节雨纷纷”,武汉的天气伴随着这个清明节下了一场暴雨,整个城市如海一样,朋友圈渗透着清明节武汉看海的节奏.今年又没有回老家祭祖,但是心里依然是怀念着那些亲人,虽说他们已离我们远去,然而那些血浓于水的亲情是一辈子无法忘记的,在心里深深的想念他们.生活继续,激情永恒!时刻保持着奋斗的节奏,为那些爱我们的和我爱的人,好好活着,做一个斗士,让我们都能够获得幸福!继续我们的学习吧!在这里首先分享海子的一首诗: 面对大河我无限惭愧, 我年华虚度,空有一身疲倦,

SQLServer学习笔记系列3

一.写在前面的话 今天又是双休啦!生活依然再继续,当你停下来的时候,或许会突然显得不自在.有时候,看到一种东西,你会发现原来在这个社会上,优秀的人很多,默默 吃苦努力奋斗的人也多!星期五早上按时上班,买好早餐,去公司餐厅吃早餐,我遇见了一个人,也许一次两次我还不会去注意,然而我每次在餐厅吃早餐, 都会遇到他,我看到他的是每一次都带着一碗白粥在那里吃,甚至连一点咸菜都没用,或许我这样的单身狗,不能理解有家室的痛楚,也许这是他的一种生活 方式,但我更多的看到的是他的一种吃苦,为了家人,为了将来的一种

SQLServer学习笔记系列1

本系列博文转载自http://www.cnblogs.com/liupeng61624/category/668878.html 本人是新入行的小菜鸟,希望转载一些博文和大家一起学习!谢谢! SQLServer学习笔记系列1 一.前言 一直自己没有学习做笔记的习惯,所以为了加强自己对知识的深入理解,决定将学习笔记写下来,希望向各位大牛们学习交流!不当之处请斧正!在此感谢! 这边就先从学习Sqlserver写起,自己本身对数据库方面不擅长,所以决定对此从基础开始学习,大牛们对此文可以忽略!首先以<

SQLServer学习笔记系列2

SQLServer学习笔记系列2 一.写在前面的话 继上一次SQLServer学习笔记系列1http://www.cnblogs.com/liupeng61624/p/4354983.html以后,继续学习Sqlserver,一步一步走下去,相信努力终会 有收获!一直坚信这句话,这个世界上比你优秀的人很多,他们在你休息的时候,勤勤恳恳的做着我们看不到的事情,但你回首往事的时候,真心觉得那段奋 斗的岁月让你骄傲!年轻就得折腾,年轻就要奋斗!好啦,进入正题吧! 二.sql的范围内查找 (1)betw

SQLSERVER死锁详解

看了网上很多关于死锁的的博客,大家通常介绍死锁的原理,本人也写一个详细的分析.当然,是关于SQLSERVER的死锁. 使用SQL Profiler抓取死锁事件 2.选择选项卡:事件选择,勾选右下角的显示所有事件,找到Locks事件,勾选上Deadlock graph. 3.再选择第三个选项卡:事件提取设置,勾上死锁XML,弹出文件保存路径,输入文件名即可. 4.以上设置,出现死锁时会保存到死锁XML文件中,经操作发现只保存了最后一个死锁图,如果死锁比较多,需要使用SQL Profiler逐个保存

SQLServer学习笔记&lt;&gt;相关子查询及复杂查询

二.查询缺少值的查询 在这里我们加入要查询2008年每一天的订单有多少?首先我们可以查询下订单表的订单日期在2008年的所有订单信息. 1 select distinct orderdate,count(*) as N'每日订单量' from sales.orders 2 where orderdate between '20080101' and '20081231' 3 group by orderdate 查询结果如图: 从上面可以看出来,每天的订单的数量根据orderdate分组以后统计

SQLServer学习笔记系列4

一.写在前面的话 好多天没有记录sql学习笔记了,要坚持下去,坚信每一点的进步都是为在积蓄力量.今天看到一幅图,特此分享出来. 通过这幅图,我看到的是每人站在自己的角度看问题,感受是不一样的,就如同学习知识一样,总觉得自己的理解才是最独特的,有时候适当把东西分享出 去,听听别人的见解,或许会让我们理解的更加深刻.换位思考,冷静处理,沉着淡定,不骄不躁,bug只不过生活的一部分,正因为有了bug才会让我们进 步,让我们去学习,去追寻问题的答案,一起努力,做一个快乐的程序猿.这个世界唯一不变的就是变

SQLServer学习笔记系列10

一.写在前面的话 生活的路很长,还是要坚持走下去,自己选择的生活,就该让这样的生活放射精彩!我不奢求现在的积累,在将来能够收获多少,至少在以后的日子里回忆起来,我不曾放弃过,我坚持过,我不后悔!最近跟朋友谈到成长的话题,我们似乎摆脱不了被敦促的年纪,结婚.下一代是父母对我们的期盼,不同的年龄看问题的方式或许不同,真的到了他们那个年龄,我们才能真正体会那种心情,那种期盼!我只想告诉父母们,我们会努力的!走进未来的幸福,也是我们追求的,只是在这条路上,我们需要更大的勇气努力!你们好好保重,幸福会来的