Escalade de verrous
L'escalade de verrou est le processus de conversion de plusieurs verrous de grain fin, tels qu'une ligne, en quelques verrous de grain plus gros, tels qu'une table. L'utilisation de l'escalade de verrou réduit les temps système.
Microsoft SQL Server Compact 3.5 escalade automatiquement les verrous de ligne et de page en verrous de table lorsqu'une transaction dépasse son seuil d'escalade. Dans SQL Server Compact 3.5, l'escalade de verrous peut se produire d'une ligne vers une table ou d'une page vers une table, mais pas d'une ligne vers une page. Lorsque l'escalade se produit au niveau d'une table, aucune demande ne peut être effectuée pour un verrou inférieur à une table.
Par exemple, lorsqu'une transaction opère sur les lignes d'une table, SQL Server Compact 3.5 acquiert automatiquement les verrous sur ces lignes et place des verrous intentionnels de niveau supérieur sur les pages et la table qui contiennent ces lignes. Toute page d'index appropriée est également verrouillée. Lorsque le nombre de verrous gérés par la transaction dépasse son seuil, SQL Server Compact 3.5 tente de remplacer le verrou intentionnel sur la table par un verrou plus fort. Par exemple, un verrou intentionnel d'accès exclusif (IX) est remplacé par un verrou exclusif (X). Après avoir acquis le verrou plus fort, tous les verrous de niveaux page et ligne gérés par la transaction dans la table sont libérés.
L'escalade de verrous se produit par table, lorsqu'une demande de verrou entraîne le dépassement d'un seuil d'escalade de verrous spécifique. Tous les verrous de niveau sous-table, quel que soit leur type, sont pris en compte dans ce seuil. Le seuil d'escalade doit être uniquement considéré comme une valeur approximative, car tout verrou requis par des opérations internes est comptabilisé dans ce seuil. L'escalade risque de se produire plus tôt que prévu.
Si l'escalade est impossible en raison d'un conflit de verrous, la transaction continue mais elle tentera peut-être une nouvelle escalade par la suite.
Notes
Les verrous intentionnels, les verrous de ligne et les verrous de page sont tous pris en compte dans la comptabilisation donnant lieu à l'escalade, excepté si ce sont des verrous de table temporaires. Lorsque le nombre total de verrous intentionnels, de verrous de ligne et de verrous de page sur une table spécifique dépasse le seuil d'escalade, il y a escalade.
Vous pouvez contrôler l'escalade de verrous par session en définissant le seuil d'escalade de verrous, comme illustré dans l'exemple de code suivant :
SET LOCK_ESCALATION 1000;
Ce paramètre affecte toutes les tables de la base de données. Sa valeur par défaut est 100.