Granularité et hiérarchie des verrous

Le Moteur de base de données SQL Server de Microsoft possède un verrouillage multigranulaire qui permet à différents types de ressources d'être verrouillés par une transaction. Pour minimiser le coût du verrouillage, le Moteur de base de données verrouille automatiquement les ressources au niveau approprié pour la tâche. Le verrouillage à un faible niveau de granularité (tel que les lignes) augmente la simultanéité d'accès, mais à un coût plus élevé, puisqu'un grand nombre de verrous doit être maintenu si de nombreuses lignes sont verrouillées. Le verrouillage à un niveau de granularité élevé (tel que les tables) est coûteux en termes de simultanéité d'accès, car le verrouillage d'une table entière empêche les autres transactions d'accéder à d'autres parties de la table. Cependant, son coût est moindre puisque les verrous sont peu nombreux.

Le Moteur de base de données doit souvent acquérir des verrous à plusieurs niveaux de granularité pour protéger intégralement une ressource. Ce groupe de verrous à plusieurs niveaux de granularité est appelé « hiérarchie des verrous ». Par exemple, pour protéger complètement la lecture d'un index, une instance du Moteur de base de données devra peut-être acquérir des verrous partagés sur les lignes et des verrous partagés Intent sur les pages et la table.

Le tableau suivant répertorie les ressources que le Moteur de base de données peut verrouiller.

Ressource

Description

RID

Identificateur de ligne utilisé pour verrouiller une seule ligne dans un segment de mémoire.

KEY

Verrou de ligne dans un index utilisé pour protéger des groupes de clés dans les transactions susceptibles d'être sérialisées.

PAGE

Page de 8 kilo-octets (Ko) dans une base de données, par exemple des pages de données ou d'index.

EXTENT

Groupe contigu de huit pages, par exemple des pages de données ou d'index.

HoBT

Segment de mémoire ou arbre B (B-tree). Verrou protégeant un arbre B (B-tree) (index) ou les pages de données de segment de mémoire d'une table ne possédant pas d'index cluster.

TABLE

Table complète comprenant tous les index et toutes les données.

FILE

Fichier de base de données.

APPLICATION

Ressource spécifiée par une application.

METADATA

Verrous des métadonnées.

ALLOCATION_UNIT

Unité d'allocation.

DATABASE

Base de données complète.

Note

Les verrous HoBT et TABLE peuvent être affectés par l'option LOCK_ESCALATION de l'instruction ALTER TABLE.