J'essaie de comprendre un papier sur un arbre B concurrent, dans lequel l'auteur a mentionné le verrou VS VS, et la manière dont les verrous n'ont pas besoin d'un "gestionnaire de verrouillage". J'ai essayé de comprendre quelles sont les différences entre ces deux pendant deux jours.
Google résultant:
"Les serrures assurent une cohérence logique des données. Ils sont mis en œuvre via une table de verrouillage, maintenus pendant une longue période (par exemple 2PL) et une partie du mécanisme de détection d'impasse.
les loquets sont comme des sémaphores. Ils assurent la cohérence physique des données et des ressources, qui ne sont pas visibles au niveau transactionnel "
Cependant, je suis toujours assez confus. Quelqu'un peut-il élaborer à ce sujet? Et qu'est-ce qu'un gestionnaire de verrouillage fait exactement?
Merci d'avance.
De la CMU 15-721 (printemps 2016), la conférence 6 Présentation, les diapositives 25 et 26, qui cite ne enquête sur les techniques de verrouillage B-Tree de GOETZ GRAEFE:
Serrures
[.____] → protège le contenu logique de l'indice d'autres TXNS.
[.____] → Tenu pour la durée de TXN.
→ Besoin de pouvoir remplacer les modifications.
loquets
[.____] → protège les sections critiques de la structure de données interne de l'indice d'autres threads.
→ maintenue pour la durée de l'opération.
→ n'avez pas besoin de pouvoir remplacer les modifications.
Cela dépend vraiment de votre SGBD, mais voici une bonne explication pour Oracle.
http://www.dba-oracle.com/t_lru_latches.htm
Les verrous sont comme des serrures pour RAM Structures de mémoire pour éviter l'accès simultané et assurer une exécution en série du code du noyau. Les loquets LRU (les moins récemment utilisés) sont utilisés lors de la recherche, de l'ajout ou de la suppression d'un tampon de la Cache tampon, une action qui ne peut être effectuée que par un processus à la fois.
Un autre nom pour un loquet est "Spin Lock". C'est une simple "tandis que la boucle" jusqu'à ce que Bit soit zéro (selon la mise en œuvre). Le thread d'exécution n'est jamais endormi pendant que le loquet n'est pas disponible. Aucune file d'attente. Une serrure de spin est utile pour le verrouillage de l'objet de mémoire à court terme, mais un gaspillage s'il est tenu pendant une durée plus longue. Voir l'article "Spinlock" sur Wikipedia
Les serrures sont généralement supportées par le système et, au cas où elles sont prises, votre thread sera mis au sommeil afin de ne consommer aucune ressource de processeur. Chaque verrou maintient une file d'attente interne de tous les filets suspendus.
Le gestionnaire de verrouillage est le sous-système qui peut vous fournir en tant que serrures de spin en tant que serrures lourdes pour un support de concurrence.
Voir aussi le article de Tom Kyte sur les verrous et les verrous .
Voici de SQL Server Point de stand.
Les loquets sont des objets de synchronisation de poids léger à court terme. Contrairement aux verrous, les verrous ne respectent pas la transaction logique complète. Ils ne détiennent que sur l'opération sur le page
.
Les loquets sont utilisés par le moteur pour la synchronisation de plusieurs threads (par exemple, essayer d'insérer sur une table). Les loquets ne sont pas pour le développeur ou l'application - il est que le moteur fasse sa tâche. Les loquets sont un mécanisme de contrôle interne. Tandis que les verrous concernent le développeur et l'application de contrôler. Les loquets sont pour la cohérence de la mémoire interne. Les serrures sont pour la cohérence transactionnelle logique.
Les attentes causées par des verrous sont très importantes pour diagnostiquer les problèmes de performance. Jetez un coup d'œil à diagnostiquer et résoudre le loquet sur le papier blanc SQL Server . Les PAGEIOLATCH_EX
est un type d'attente important.
Les références
les différents serrures et verrous:
Verrouillage Assurez-vous que la même inscription ne peut pas être modifiée par deux connexions et verrous différentes, assurez-vous que l'enregistrement réside dans une page de données appropriée pour une nouvelle opération de lecture et d'écriture.
Les verrous fournissent une consistance de la transaction logique et des verrous fournissent une consistance de la zone de mémoire.
Le DBA peut contrôler et gérer les verrous de la base de données en appliquant différents niveaux d'isolation et pour les verrous, DBA n'a aucun contrôle car il est géré par le serveur SQL.
Citant de OLTP à travers le verre à la recherche et ce que nous avons trouvé là de StoneBraker et al.
Verrouillage. Le verrouillage traditionnel en deux phases pose une surcharge de valeur importante car tous les accès aux structures de base de données sont régis par une entité distincte, le gestionnaire de verrouillage.
Verrouillage. Dans une base de données multi-threadées, de nombreuses structures de données doivent être verrouillées avant d'être consultées. Suppression de cette fonctionnalité et aller à une approche unique filetée a un impact notable de performance.
Cette interprétation s'associe ensuite verrouillant avec des objets de niveau de base de données par exemple. rangées, alors que les verrous fonctionnent au niveau inférieur des structures de données.
Selon le papier architecture d'un système de base de données p223.
Les loquets diffèrent des verrous de différentes manières:
Les serrures sont conservées dans la table de verrouillage et situées via des tables de hachage; Les verrous résident en mémoire près des ressources qu'ils protègent et sont accessibles via une adressage directe.
Dans une implémentation stricte 2PL, les verrous sont soumis au strict protocole 2PL. Les verrous peuvent être acquis ou abandonnés lors d'une transaction basée sur une logique interne spéciale.
L'acquisition de verrouillage est entièrement entraînée par l'accès des données, et la commande et la durée de vie des acquisitions de verrouillage sont donc largement comprises entre les mains d'applications et de la requête Optimizer. Les verrous sont acquis par un code spécialisé à l'intérieur du SGBD et le code interne de la SGBD permettent des demandes de verrouillage et libéré de manière stratégique.
Les verrous sont autorisés à produire une impasse et verrouillent des blocages sont détectés et résolus via un redémarrage transactionnel. L'impasse de verrouillage doit être évitée; La survenue d'une impasse de verrouillage représente un bogue dans le code DBMS.
Les verrous sont implémentés à l'aide d'une instruction matérielle atomique ou, dans de rares cas, où cela n'est pas disponible, par exclusion mutuelle dans le noyau OS.
Les appels de verrouillage prennent au plus quelques douzaines de cycles CPU alors que les demandes de verrouillage prennent des centaines de cycles de la CPU.
Le gestionnaire de verrouillage suit tous les verrous tenus par une transaction et libère automatiquement les verrous dans le cas où la transaction jette une exception, mais les routines de SGBD internes qui manipulent les verrous doivent les suivre et incluent soigneusement le nettoyage manuel dans le cadre de leur manipulation d'exception.
Les loquets ne sont pas suivis et ne peuvent donc pas être automatiquement libérés si les défauts de la tâche.