Un deadlock può verificarsi per molte molte ragioni, quindi per prima cosa dovresti fare un po 'di compiti a casa se vuoi essere aiutato e dirci che cosa sta causando lo stallo, ad es. quali sono i lotti coinvolti nell'esecuzione del deadlock, quali risorse sono coinvolte e così via e così via. Il Profiler deadlock event graph è sempre un ottimo punto di partenza per le indagini.
Se mi azzarderei a sparare nell'oscurità, ciò che accade è che le tue query e gli indici non sono regolati correttamente, quindi la maggior parte delle tue operazioni di lettura (e forse alcune delle scritture) sono scansioni complete della tabella e quindi sono garantite per scontrarsi con aggiornamenti. Ciò può causare deadlocks by order of index access, deadlock per ordine di operazioni, deadlock tramite escalation e così via e così via.
Una volta identificata la causa del deadlock, è possibile prendere l'azione appropriata per rimuoverlo. I casi in cui l'azione corretta consiste nel ricorrere a letture sporche sono estremamente rari.
BTW Non sono sicuro di cosa intendi con "TransactNo updlock". Stai chiedendo in particolare lo S-U/U-S asymmetry of the U locks?
fonte
2009-05-31 19:10:20
L'escalation del blocco è quando un motore decide di rinunciare a prendere singoli blocchi granulari e decide di ottenere un blocco di livello più alto. L'escalation dei blocchi passa dai blocchi a livello di riga ai blocchi a livello di tabella. Un segno di stallo di una situazione di stallo in escalation dei blocchi è il coinvolgimento dei blocchi I (serrature di intenti) mentre l'escalation tenta di ottenere veri blocchi sul tavolo e sarà in conflitto con i vari blocchi di intenti (S-IX, S-IS) già posizionati su di esso . Il tuo esempio è la lettura canonica seguita dal caso di scrittura, non è correlata all'escalation. –
Se ho usato la terminologia sbagliata, allora mi scuso; ma lo scenario (qualunque sia il nome) è un problema comune. –