We are trying to resolve a deadlock problem. The transaction that is getting rolled back is attempting to issue an Update (U) lock on a resource that another transaction has an Exclusive (X) lock on. According to Books Online (http://msdn.microsoft.com/en-us/library/ms175519.aspx), an Update lock is supposed to prevent deadlocks, not cause them.
So, my question is, why/when is an Update lock applied to a resource? We’re a little confused about this because the resource that is attempting to have the Update lock applied to will not be updated by the process that is having the transaction rolled back.
Thanks for your help on this.
Randy
There’s a whole universe of “what if” behind what causes deadlocks (by which I mean, there’s no way to tell from your initial post what’s really going on). Could be table locks, could be locks on indexes; could be oustanding transactions you are not aware of; could be table header locks, could be tempdb issues (very unlikely), who knows?
The best method I’ve ever found to diagnose deadlocks works like so:
To-date, once I’ve gotten and worked through that XML, I’ve always been able to figure out what was causing the deadlock. It’s a good way to learn how weird and convoluted some of SQL’s internals can get.