Ich habe die folgende Linq:Deadlock QUERY in SqlServer
var qry = s.GetTable<MessageEventDTO>().Where(x => x.MessageName == messageName && x.SourceTyp == sourceTyp && x.Source == source && (x.Status == MessageEventStatus.open || x.Status == MessageEventStatus.acknowledged));
goneMessages = qry.ToList();
var ret = qry
.Set(x => x.Status, x => x.Status | MessageEventStatus.gone)
.Set(x => x.TimestampGone, timeStamp)
.Update();
return ret;
wich wird folgende SQL umgewandelt werden:
UPDATE MessageEvents SET Status = Status | 1, TimeStampGone = @1 WHERE MessageName = @2 AND SourceTyp = @3 Source = @4 AND (Status = 0 OR Status = 2)
das Problem ist jetzt, gibt es mehrere Updates parallel laufen, und ich habe Deadlock-Ausnahmen, aber ich verstehe nicht warum?
Welche Indizes haben Sie auf dem Tisch? Deadlocks werden oft mit Index-Tuning vermieden. –
Öffnen Sie Transaktionen in Ihrem Code? Ich denke, das sollte nicht passieren, wenn Sie keine Transaktionen verwenden ... –