Qu'est-ce que l'escalade de verrous?


48

On m'a posé cette question lors d'un entretien et je n'ai pas eu de réponse. Quelqu'un peut-il expliquer ici?

Réponses:


45

Les verrous de base de données peuvent exister sur des lignes, des pages, des tables entières ou des index. Lorsqu'une transaction est en cours, les verrous détenus par la transaction utilisent des ressources. L'escalade de verrous se produit lorsque le système consolide plusieurs verrous en un niveau plus élevé (par exemple, la consolidation de plusieurs verrous de ligne sur une page ou de plusieurs pages dans une table entière) généralement pour récupérer des ressources occupées par un grand nombre de verrous à granularité fine.

Cela se fera automatiquement, bien que vous puissiez définir des indicateurs sur les tables (voir ALTER TABLE dans les livres en ligne) pour contrôler la stratégie d'escalade de verrous sur cette table particulière. En particulier, l'escalade de verrous prématurée ou trop enthousiaste posait problème sur les anciennes versions de Sybase et de SQL Server lorsque deux processus écrivaient simultanément des lignes distinctes sur la même page. Si vous remontez suffisamment loin (IIRC SQL Server 6.5), SQL Server n’avait pas réellement de verrouillage de ligne mais pouvait uniquement verrouiller les tables ou les pages. Si cela se produisait, vous pourriez avoir des conflits entre les insertions d'enregistrements de la même page. souvent, vous mettiez un index en cluster sur la table afin que les nouvelles insertions soient placées sur des pages différentes.


3
Il convient également de noter que nous n’avons aucun contrôle sur la remontée du serveur.

Nous faisons maintenant. C'est l'appel T1211.
Josué

@ Josué, l'indicateur de trace 1211 est utilisé pour désactiver l'escalade de verrous. Nous ne pouvons pas indiquer à SQL Server d’escalader à un moment donné.
Juste un apprenant

10
Les verrous de ligne ne sont pas convertis en verrous de page, mais directement en verrous de table.
Manoj Pandey

C'est vrai ce que Manoj a déclaré. Vous devez corriger cette partie de votre réponse pour éviter d'induire en erreur les utilisateurs de SQL Server moins expérimentés
NikolaD

21

Il s'agit d'une méthode permettant de réduire les frais généraux du système, en convertissant de nombreuses serrures à grain fin en moins de serrures à grain grossier. Des informations plus détaillées peuvent être trouvées ici et ici .

Par exemple, si vous avez plusieurs verrous (généralement des centaines ou plus) sur des lignes spécifiques d'une table, dès que vous dépassez le nombre maximal de verrous autorisé, vous pouvez les échanger contre un verrou sur l'ensemble de la table.


12

SQL Server effectue l' escalade de verrous afin de réduire la surcharge de mémoire en convertissant plusieurs verrous de bas niveau à grain fin en verrous de niveau supérieur à grain grossier.

  • Les verrous de ligne sont toujours convertis en verrous de table, et
  • Les verrous de page sont également convertis en verrous de table.

C'est un mythe de dire que les verrous de rangée sont convertis en verrous de page , ce que @ConcernedOfTunbridgeWells a mentionné plus haut est faux.

Si une table ayant très peu de mises à jour de lignes, le moteur SQL essaiera de prendre des verrous de lignes sur ces lignes ou des verrous de page sur ces pages. Disons que cela a pris Row-Lock. Mais si les mises à jour de ligne augmentent le seuil (environ 5 000 verrous), alors au lieu de prendre plusieurs verrous de ligne, un seul verrou de table est nécessaire. Ainsi, cela réduit la surcharge de mémoire en libérant plusieurs verrous de ligne et en prenant un seul verrou de table, mais en augmentant la simultanéité. Il en va de même avec le verrou de page.

Le seuil d'escalade de verrous est d'au moins 5 000 verrous et dépend de plusieurs facteurs. Une explication détaillée de l'escalade de verrous a été mentionnée ici dans MSDN BoL: https://technet.microsoft.com/en-us/library/ms184286(v = sql.105) .aspx


5

L'escalade de verrous signifie la conversion d'un verrou en un mode plus restrictif. Ceci est le plus souvent vu dans les bases de données. Une requête peut avoir une ressource verrouillée pour "partagée" et la transformer en "exclusive" pour effectuer une mise à jour.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.