SQL Server死锁的解决过程

栏目: 数据库 · 发布时间: 7年前

内容简介:SQL Server死锁的解决过程

某现场报一个 SQL 死锁,于是开启了1222跟踪:

dbcc traceon(1222,-1)

一段时间之后拷贝ERROR文件查找相关信息,比较有用的摘录出来如下:

语句一:

select study_iuid,station_aet,modality,accession_no,patient_fk,item_attrs,start_datetime 
from worklist w WITH (readpast), mwl_item m 
where w.TAG_STUDY_INSTANCE_UID=m.study_iuid 
and isread= '1' and (TAG_SPS_STATUS is null or TAG_SPS_STATUS= 'SCHEDULED' or TAG_SPS_STATUS= 'Discontinued'
and TAG_SPS_START_DATE between @P0 and @P1 
and   not exists ( select 1 from mpps b where b.study_iuid=m.study_iuid) 

语句二:

INSERT INTO mwl_item (created_time, updated_time, sps_id, start_datetime, station_aet, station_name, modality, perf_physician, perf_phys_fn_sx, perf_phys_gn_sx, perf_phys_i_name, perf_phys_p_name, req_proc_id, accession_no, study_iuid, item_attrs, sps_status, patient_fk)
VALUES (@P0, @P1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10, @P11, @P12, @P13, @P14, @P15, @P16, @P17); 

相关的死锁资源如下:

resource-list
  pagelock fileid=1 pageid=6996 dbid=8 objectname=Worklist.dbo.mwl_item id=lock19825c100 mode=IX associatedObjectId=72057594039697408
  owner-list
    owner id=process984d048 mode=IX
  waiter-list
    waiter id=process60e9708 mode=S requestType=wait
  pagelock fileid=1 pageid=11086 dbid=8 objectname=Worklist.dbo.mwl_item id=lock1b087b100 mode=S associatedObjectId=72057594039697408
  owner-list
    owner id=process60e9708 mode=S
  waiter-list
    waiter id=process984d048 mode=IX requestType=wait

可以明显的看到是select语句与insert语句产生了死锁,争用的资源分别6996和11086这两个page,这里比较奇怪因为sqlserver在默认隔离级别下,select操作会迅速释放页上的S锁,因此不存在形成死锁的基础--不可剥夺条件。

但其实这里是一种形成死锁的典型条件,参考宋大神的一幅图这里:--由书签查找产生的死锁。

SQL Server死锁的解决过程

其原理为:

1.由最初的update语句产生数据页A的IX锁,更新完毕后要请求索引页B的IX锁以便更新索引,但此时B页上已有与IX不兼容的S锁。

2.而select语句在索引页B上加了S锁后,正要通过书签查找获取数据页A的数据,要获取A页就要在A页上暂时加S锁,但A页又被update语句加了不兼容的IX锁,因此两个进程形成环路等待----死锁。

根据死锁的产生原理决定进行以下优化:

1.优化select语句使其尽快完成以减少死锁频率。

2.对select语句使用nolock选项以避免死锁问题。

3.通知开发优化相关代码的执行顺序来避免死锁问题。

最终优化了select语句,其他两条交给开发做修改。

本文永久更新链接地址 http://www.linuxidc.com/Linux/2017-06/144604.htm


以上所述就是小编给大家介绍的《SQL Server死锁的解决过程》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

新媒体运营实战技能

新媒体运营实战技能

张向南 勾俊伟 / 人民邮电出版社 / 2017-5 / 39.80元

《新媒体运营实战技能》共7章。第1章重点介绍了新媒体图片的创意思路及制作技巧,包括微信公众号封面图、信息长图、icon图标、九宫图、gif图片的具体实战操作;第2章重点介绍了创意云文字、微信排版、滑动看图等新媒体文字的排版方法与处理技巧;第3章是新媒体表单,引导读者对表单结构、设计场景及具体应用全面了解;第4章关于H5的创意思路及制作方法,解析了引发H5传播的心理因素,并重点介绍H5的制作工具与具......一起来看看 《新媒体运营实战技能》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具