Je veux en savoir plus sur les différents types de serrures acquises par le moteur de base de données.
Veuillez m'aider à comprendre ces concepts.
Verrouillage de ligne
Un verrou de ligne est le niveau de granularité de verrouillage le plus bas possible dans SQL Server. Cela signifie qu'une ou plusieurs lignes spécifiques seront verrouillées et les lignes adjacentes sont toujours disponibles pour le verrouillage par des requêtes simultanées.
Verrouillage de page
Un verrouillage de page dans SQL Server verrouille 8K de données même lorsque votre requête n'a besoin que de 10 octets de la page. Ainsi, votre requête verrouillera des données supplémentaires que vous ne demandez pas dans votre requête.
Verrou Hobt
Lorsqu'une table est partitionnée avec " partitionnement de la table SQL Server ", il est possible qu'une seule partition soit verrouillée (Hobt signifie Heap ou B-Tree)
Remarque: L'escalade de verrous vers les verrous HOBT est désactivée par défaut. exécutez ALTER TABLE MyTable SET (LOCK_ESCALATION = AUTO)
pour activer l'escalade de verrouillage HOBT.
Verrou de table
Un verrou de table verrouille la table complète.
Que sont les pages de données
Microsoft SQL Server organise toutes ses données dans des "pages de données" pouvant contenir 8 000 données. Cela signifie que pour tout accès aux données dans SQL Server 8K, les informations seront lues.
Les pages de données ne peuvent contenir que des informations provenant d'une seule table et la présentation d'une page est bien documentée sur MSDN
Le fait que SQL Server lira toujours une page de données complète vous donne également une idée de la raison pour laquelle il préfère utiliser des verrous au niveau de la page. Les verrous au niveau des pages impliquent que vous pouvez verrouiller beaucoup plus de données que vous ne le pensez.
Par exemple, supposons que nous ayons une table avec une taille d'enregistrement totale de 1024 octets avec un index cluster sur le champ ID
. Lorsque nous exécutons la requête suivante: SELECT * from MyTable (xlock) where ID = 123
non seulement cet enregistrement sera verrouillé, mais (en fonction du remplissage de la page) 3 enregistrements supplémentaires maximum seront également verrouillés.
Quand ces verrous sont-ils acquis
Une requête sera analysée par le gouverneur de requête et les verrous requis seront déterminés et demandés au gestionnaire de verrous. SQL Server essaiera de trouver un équilibre entre les performances et les conflits pour déterminer la stratégie de verrouillage.
SQL Server suit également un système d '"escalade des verrous" qui réduira la granularité du verrouillage lorsque plus de 5000 verrous d'un certain type sont acquis. Voir cet article sur l'escalade de verrous pour plus d'informations.
Ce comportement peut être modifié en utilisant des astuces de verrouillage en mettant l'accent sur hints, dans une requête, vous pouvez spécifier par table quel type des serrures que vous préférez. SQL Server essaiera d'honorer votre demande, mais il appliquera toujours l'escalade des verrous.