Contrôle d'accès simultané
Méthodes de contrôle d'accès simultané pour garantir la cohérence des données:
(1) Verrou:
Verrou ordinaire: exécution en série
Verrouillage en lecture-écriture: lecture et lecture simultanées
(2) Données multi-versions: lecture et écriture simultanées
(1) Lorsqu'une tâche d'écriture se produit, clonez une copie des données, distinguée par le numéro de version;
(2) Écrire des tâches pour exploiter les données nouvellement clonées jusqu'à leur soumission
(3) La tâche de lecture simultanée peut continuer à lire les données de l'ancienne version sans bloquer
Réalisez la lecture des données de l'ancienne version:
Journal de rétablissement: Le journal de rétablissement est utilisé pour garantir la fonction ACID des données soumises.
Si la mise à jour des données soumise par la transaction est écrite au hasard à chaque fois, les performances sont faibles. Optimisation: écrivez les données modifiées dans le journal de rétablissement dans l'ordre et faites-les périodiquement clignoter sur le disque.
annulation du journal: garantie d'annulation du journal, les données non validées affectent les caractéristiques ACID de la base de données.
Avant que la transaction ne soit validée, le miroir des données (l'ancienne version avant la modification) sera modifié. Lorsque la transaction est annulée ou que la base de données se bloque, l'ancienne version est restaurée.
Insérez le comportement annuler le journal enregistrer PK, mettre à jour / supprimer le comportement annuler la ligne du magasin de journaux. Il existe des tampons séparés.
Segment de restauration: stocker les journaux d'annulation
InnorDB atteint un niveau de concurrence élevé: InnorDB est un moteur de stockage basé sur le contrôle de concurrence multi-version (MVCC)
Les données du segment d'annulation sont un instantané des données historiques. Les lectures instantanées (lectures cohérentes déverrouillées) sont la raison pour laquelle innorDB est si fortement simultané.
Les sélections ordinaires sont des lectures d'instantanés, sauf si elles sont verrouillées, comme select .. fro update.
Quelle est la version des données lues par l'instantané?
Sous RC, la lecture de l'instantané lit toujours le dernier instantané de données de ligne (transaction validée)
Sous RR, la version de données de la première lecture est lue, indépendamment de l'heure de début de la transaction simultanée et de la relation d'exclusion mutuelle (sans verrouillage). Supposons que l'heure de la première lecture soit enregistrée comme T et que les enregistrements soumis après l'heure T ne soient pas lus.
Verrouiller
Informations: https://mp.weixin.qq.com/s/tmkRAmc1M_Y23ynduBeP3Q
1. Sept types de serrures
1) Verrouillage auto-augmentant:
Il s'agit d'un verrou spécial au niveau de la table qui insère la colonne AUTO_INCREMENT pour les transactions. Si une transaction est insérée, les autres transactions doivent attendre.
2) Serrure partagée / exclusive
Verrou partagé S: verrou de lecture
Verrouillage exclusif X: verrouillage en écriture. Serrure très solide, non compatible avec d'autres serrures.
La lecture et la lecture peuvent être parallèles, lire et écrire, écrire et écrire s'excluent mutuellement.
3) Verrouillage d'intention
Le verrou d'intention est une déclaration d'intention faite avant qu'une transaction veuille ajouter un verrou partagé / exclusif. Est un verrou au niveau de la table.
Intention du verrou partagé IS: intention de transaction d'ajouter un verrou partagé à certaines lignes de la table
Le verrou exclusif intentionnel est: la transaction ajoute intentionnellement un verrou x exclusif à certaines lignes de la table
4) Insérer un verrou d'intention
Spécifiquement pour les opérations d'insertion. Plusieurs transactions, dans le même index, dans la même plage, si la position d'insertion n'est pas en conflit, ne se bloqueront pas.
5) Verrouillage d'enregistrement
Bloquer les enregistrements d'index. Par exemple: sélectionnez ... pour la mise à jour
6) Serrure de dégagement
Intervalle de blocage des enregistrements d'index. Empêchez d'autres transactions d'insérer des données dans l'intervalle. Par exemple: sélectionnez .. entre ... et ... pour la mise à jour
7) Serrure à clé Pro
Bloquer les enregistrements d'index et les intervalles d'index. Empêchez la lecture fantôme.
Serrure optimiste et serrure pessimiste. Le verrou optimiste utilise le numéro de version et le verrou pessimiste attend toujours;
Verrou de table:
table de verrouillage
Verrou de ligne:
commencer à démarrer une transaction
sql
commettre
2. Affaires
1) Quatre caractéristiques:
Une atomicité: toutes les opérations de la transaction sont toutes exécutées ou pas exécutées du tout
Cohérence C: toutes les opérations réussissent ou échouent
I isolement: le processus de traitement des transactions n'est pas visible pour le monde extérieur
D Permanent: la modification des données est permanente
2) Problèmes causés par des transactions simultanées:
Mises à jour perdues: les verrous optimistes utilisent des numéros de version, les mises à jour de versions inférieures seront supprimées
Lecture incorrecte: la transaction A lit le contenu modifié par la transaction B mais non validé
Lecture non répétable: la transaction A lit la transaction B pour modifier le contenu soumis. Exemple: la transaction A revient à la requête pour la première fois et exécute le traitement commercial suivant. La transaction B soumet la modification des données. La transaction A revient à la requête. À ce stade, la modification des données peut affecter l'appréciation de la logique métier de la transaction A.
Lecture magique: la transaction A lit les données mises à jour soumises par la transaction B. Exemple: Transaction A première requête, seules trois données doivent être modifiées, la transaction B soumet de nouvelles données et enfin met à jour quatre données.
3) Niveau d'isolation des transactions: le niveau d'isolation par défaut de MySQL est la lecture répétable en lecture répétée (RR)
Afficher le niveau d'isolement des transactions: afficher des variables comme 'tx_isolation'
Niveau d'isolement | Lecture sale | Non répétable | Lecture fantôme |
Lire sans engagement | Oui | Oui | Oui |
Lire soumis | Non | Oui | Oui |
Lecture répétable | Non | Non | Oui |
Sérialisable | Non | Non | Non |
Mécanisme mvcc de lecture répétable:
L'opération de sélection ne met pas à jour le numéro de version, il s'agit d'une lecture instantanée (version historique)
insérer, mettre à jour, supprimer mettra à jour le numéro de version, vous pouvez interroger les modifications soumises par d'autres transactions (qui apparaîtront comme une lecture magique)
4) Suggestions d'optimisation:
1. Autant que possible, laissez toute la récupération des données se faire via l'index pour éviter l'escalade des verrous de ligne sans index en verrous de table
2. Récupérez les conditions autant que possible pour éviter les verrous d'écart
3. Contrôlez la taille de la transaction autant que possible pour réduire la quantité de ressources verrouillées et la durée
4. Isolement des transactions aussi faible que possible