sql >> Database >  >> RDS >> Sqlserver

Deadlock-puzzel:het slachtoffer bezit geen enkele bron, die wordt gebruikt om te doden om de impasse op te lossen

In de context van vergrendeling zijn tabellen en hun gerelateerde indexen afzonderlijke entiteiten. Soms vindt dead locking plaats tussen een tabel en zijn index, in plaats van tussen twee afzonderlijke tabellen.

Het probleem is het meest waarschijnlijk wanneer een slot wordt verkregen op een index en vervolgens een ander slot wordt verkregen in de gerelateerde tabel (d.w.z. balk) om de gegevens op te zoeken. Tijdens het invoegen gebeurt dit in omgekeerde volgorde. Eerst wordt de tabel (d.w.z. de balk) vergrendeld en bijgewerkt, daarna worden de indexen vergrendeld.

select foo 
from bar 
where @someId = 0 OR SomeId = @someId

Heb je een dekkingsindex (om te helpen bij het selecteren) die zowel de SomeId als foo bevat? Op deze manier vermijdt u het opzoeken helemaal en voorkomt u dat het probleem optreedt.

Kun je de queryplannen posten in plaats van deadlockframes?



  1. Hoe SET ROWCOUNT werkt in SQL Server

  2. Parameters doorgeven aan MySQL-script

  3. sql join-tabellen waarbij 1 kolom een ​​komma heeft

  4. Hoe Percona Server voor MySQL voor hoge beschikbaarheid te implementeren