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. |
[!REMARQUE]
Les verrous HoBT et TABLE peuvent être affectés par l'option LOCK_ESCALATION de l'instruction ALTER TABLE.