死锁,简单看一看

一、如何跟踪死锁

跟踪方法见: http://guobaoguo.blog.163.com/blog/static/109162582010112311553185/

我选择的是第二种,然后获取了一份儿跟踪文件。

1、SQL Server Profiler的图形展示

clipboard[6]

2、提取的xml数据

clipboard[7]

 

二、死锁的牺牲者 victim="process98274c8"

三、看process、resource节点

process:

1、process98274c8——报表查询

2、process9862748——跨3机器,dtc分布式事务,耗时较长

resource:

1、用到的资源:表=FA_Voucher, 索引 =PK_FA_Voucher,

process9862748做插入操作, 加排他X锁,

       process98274c8 申请RangeS-S锁,请求类型 wait

2、用到的资源:表=YW_CwDistributionInfo,

         process98274c8做查询,加共享S锁,

         process9862748 申请SIX锁,请求类型 convert,此处对convert不是太理解

3、根据锁兼容模式表来看以上两种都是冲突的,也是死锁

https://msdn.microsoft.com/zh-cn/library/jj856598(v=sql.120).aspx

clipboard[12]

四、解决办法

1、报表查询添加 with(nolock),非实时性,允许脏读。

2、后期看跟踪情况,可能的话拆分分布式事务,改用消息模式

posted @ 2015-12-18 09:24  Vinton.Liu  阅读(961)  评论(1编辑  收藏  举报