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

Qu'est-ce qu'un blocage dans une base de données ?

En général, un blocage signifie que deux entités ou plus bloquent certaines sources, et qu'aucune d'entre elles n'est en mesure de terminer, car elles bloquent les sources de manière cyclique.

Un exemple :Disons que j'ai la table A et la table B, j'ai besoin de faire une mise à jour dans A puis B et je décide de les verrouiller au moment de l'utilisation (c'est un comportement vraiment stupide, mais ça sert son but maintenant ). Au même moment, quelqu'un d'autre fait la même chose dans l'ordre inverse - verrouille B d'abord, puis verrouille A.

Chronologiquement, cela se produit :

proc1 :verrouiller A

proc2 :Verrouiller B

proc1 :Verrou B - commence à attendre que proc2 libère B

proc2 :Verrou A - commence à attendre que proc1 libère A

Aucun d'eux ne finira jamais. C'est une impasse. En pratique, cela entraîne généralement des erreurs de dépassement de délai car il n'est pas souhaité qu'une requête soit suspendue pour toujours, et le système sous-jacent (par exemple, la base de données) tuera les requêtes qui ne se terminent pas à temps.

Un exemple concret d'impasse est lorsque vous verrouillez vos clés de maison dans votre voiture et vos clés de voiture dans votre maison.