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?
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:
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.
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.
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.
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