天天看点

[20131122]奇怪的死锁

死锁的奇怪的地方:死锁设计到的表示heap表,但是对key发生死锁,但是对key进行等待,死锁设计到的hotbid,无法再sys.partitions查询到objectid(这个误判是我们有索引的重建,导致hotbid变化,无法再表中查找到)

问题是出现在一个非聚集索引上,这个索引是key是uame,是走索引的,为什么和insert死锁呢

线索:表中delete的where 字段,参数化传进来使用的是nvarchar,但是表中却是使用varchar

死锁信息:

原因:

  目前还没找到原因但是估计和nvarchar 和 varchar 的隐式类型转化有关  

  大概问题我已经发现了,虽然delete 是走索引的,但是在计划上发现GetRangeThroughConvert 对类型进行转化,转后后,出来3个计算标量,

  然后再索引查找的时候对最小的,最大的标量进行 查找 就是 标量1<uame<标量3,这样导致delete 查找的范围扩大,导致和insert之间的锁请求冲突

其他资料:

  资料包括:表结构,和delete 的执行计划,如果有兴趣研究在资料方面我会尽力,按需求补全

  涉及到公司的一些表结构,不方便在公共场合透露,如果有朋友需要可以发我的邮箱索取,我的邮箱: [email protected]

继续阅读