Verrouillage du moteur de base de données

Le verrouillage est un mécanisme utilisé par le Moteur de base de données SQL Server Microsoft pour synchroniser l'accès simultané de plusieurs utilisateurs à la même donnée.

Avant qu'une transaction acquière une dépendance sur l'état actuel d'un élément de données, par exemple par sa lecture ou la modification d'une donnée, elle doit se protéger des effets d'une autre transaction qui modifie la même donnée. Pour ce faire, la transaction demande un verrou sur l'élément de données. Le verrou possède plusieurs modes, par exemple partagé ou exclusif. Le mode de verrouillage définit le niveau de dépendance de la transaction sur les données. Aucune transaction ne peut obtenir un verrou qui entrerait en conflit avec le mode d'un verrou déjà accordé sur ces données à une autre transaction. Si une transaction demande un mode de verrouillage qui est en conflit avec un verrou déjà accordé aux mêmes données, l'instance du Moteur de base de données suspend la transaction concernée jusqu'à ce que le premier verrou soit libéré.

Lorsqu'une transaction modifie une donnée, elle conserve le verrou qui protège la modification jusqu'à la fin de la transaction. La durée pendant laquelle une transaction conserve le verrou acquis pour protéger les opérations de lecture dépend de la configuration du niveau d'isolement de la transaction. Tous les verrous conservés par une transaction sont libérés lorsque cette dernière est terminée (validée ou restaurée).

En général, les applications ne demandent pas de verrous directement. Les verrous sont gérés en interne par une partie du Moteur de base de données, nommée gestionnaire de verrous. Lorsqu'une instance du Moteur de base de données traite une instruction Transact-SQL, le processeur de requêtes du Moteur de base de données détermine les ressources qui doivent être accédées. Le processeur de requêtes détermine les types de verrou nécessaires pour protéger chaque ressource, en fonction du type d'accès et de la configuration du niveau d'isolement de la transaction. Le processeur de requêtes demande ensuite les verrous appropriés auprès du gestionnaire de verrous. Le gestionnaire de verrous accorde les verrous s'il n'existe aucun verrou en conflit détenu par d'autres transactions.

Le tableau ci-dessous présente les rubriques qui décrivent les principaux concepts du verrouillage.

Rubrique

Description

Granularité et hiérarchie des verrous

Les verrous peuvent être demandés pour différents types de ressources, comme des lignes, des pages, des index, des tables ou des bases de données. Certaines opérations exigent le placement de verrous à plusieurs niveaux de granularité, formant ainsi une hiérarchie de verrous.

Modes de verrouillage

Les verrous se caractérisent par différents modes, qui spécifient le niveau d'accès d'autres transactions à la ressource verrouillée.

Compatibilité de verrouillage (moteur de base de données)

Plusieurs transactions peuvent acquérir des verrous simultanés sur la même ressource si leur mode de verrouillage est compatible. Si une transaction demande un mode de verrou qui est en conflit avec un verrou existant, elle est suspendue jusqu'à ce que le premier verrou soit libéré.

Verrouillage d'étendues de clés

Le verrouillage d'une plage de clés permet aux transactions exécutées au niveau d'isolement sérialisable d'éviter les insertions et les suppressions fantôme.

Escalade de verrous (moteur de base de données)

Si une transaction acquiert un grand nombre de verrous de ligne ou de page, le Moteur de base de données peut accorder un verrou de table et libérer tous les verrous de niveau inférieur pour réduire la surcharge de verrouillage.

Verrouillage dynamique

Le Moteur de base de données peut choisir de manière dynamique le niveau de granularité du verrouillage en fonction de l'estimation par l'optimiseur du nombre de lignes auxquelles une instruction Transact-SQL va faire référence

Affichage des informations de verrouillage (moteur de base de données)

Le Moteur de base de données et ses API associées contiennent plusieurs mécanismes permettant d'afficher les informations sur les verrous actuellement conservés dans une instance ou une base de données.

Interblocage

Des blocages se produisent lorsque deux tâches se bloquent mutuellement en permanence, du fait que chaque tâche possède un verrou sur une ressource nécessaire à l'autre tâche.