Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Puzzle de l'impasse :la victime ne possède aucune ressource, utilisée pour tuer pour résoudre l'impasse

Dans le contexte du verrouillage, les tables et leurs index associés sont des entités distinctes. Parfois, le blocage se produit entre une table et son index, plutôt qu'entre deux tables distinctes.

Le problème est plus probable lorsqu'un verrou est acquis sur un index, puis un autre verrou est acquis sur la table associée (c'est-à-dire la barre) pour effectuer la recherche de données. Lors de l'insertion, cela se produira dans l'ordre inverse. Tout d'abord, la table (c'est-à-dire la barre) est verrouillée et mise à jour, puis les index sont verrouillés.

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

Avez-vous/pouvez-vous ajouter un index de couverture (pour aider à la sélection) qui contient à la fois SomeId et foo ? De cette façon, vous éviterez complètement la recherche et empêcherez le problème de se produire.

Pouvez-vous publier les plans de requête plutôt que les cadres de blocage ?