Ho 2 query che quando eseguite contemporaneamente causano un deadlock.
Query 1: aggiorna una colonna inclusa in un indice (index1):
update table1 set column1 = value1 where id = @Id
Esegue X-Lock su table1 quindi tenta un X-Lock su index1.
Query 2:
select columnx, columny, etc from table1 where {some condition}
Esegue un S-Lock su index1 quindi tenta un S-Lock su table1.
C'è un modo per prevenire il deadlock mantenendo le stesse query? Ad esempio, in qualche modo posso prendere un X-Lock sull'indice nella transazione di aggiornamento prima dell'aggiornamento per garantire che la tabella e l'accesso all'indice siano nello stesso ordine - cosa che dovrebbe impedire il deadlock?
Il livello di isolamento è di tipo commit. I blocchi di riga e pagina sono abilitati per gli indici. È possibile che lo stesso record stia partecipando a entrambe le query - non posso dirlo dal grafico deadlock in quanto non mostra i parametri.