


Que sont les lectures de Phantom et comment InNODB les empêche-t-il (verrouillage des touches suivantes)?
Apr 13, 2025 am 12:16 AMINNODB empêche efficacement la lecture de fant?mes à travers le mécanisme de verrouillage des touches suivantes. 1) Le verrouillage des touches suivants combine les verrous en ligne et les serrures d'espace pour verrouiller les enregistrements et leurs lacunes pour empêcher l'insertion de nouveaux enregistrements. 2) Dans les applications pratiques, en optimisant la requête et en ajustant les niveaux d'isolement, la concurrence des verrouillage peut être réduite et les performances de la concurrence peuvent être améliorées.
introduction
Dans le monde des bases de données, les lectures fant?mes sont comme des existences fantomatiques, en silence mais peuvent causer des problèmes inattendus. Aujourd'hui, nous allons discuter de la nature de la lecture fantastique et de la fa?on dont InNODB empêche ce phénomène à travers le mécanisme de verrouillage des touches suivantes. Grace à cet article, vous comprendrez non seulement la définition et le préjudice de la lecture de l'illusion, mais vous comprenez également en profondeur comment le mécanisme de verrouillage d'InNODB garantit la cohérence des données.
Examen des connaissances de base
Avant de discuter de la lecture fantastique, nous devons d'abord comprendre certains concepts de base. La transaction est l'unité de base des opérations de base de données, qui assure l'atomicité, la cohérence, l'isolement et la persistance (acide) d'une série d'opérations. Le niveau d'isolement est un mécanisme utilisé pour contr?ler la visibilité entre les transactions. Les meilleurs incluent la lecture non engagée, la lecture engagée, la lecture reproductible et la sérialisable.
INNODB est un moteur de stockage pour MySQL, qui prend en charge le verrouillage au niveau des lignes, ce qui signifie qu'il peut verrouiller les lignes individuelles au lieu de tables entières, améliorant ainsi les performances de concurrence.
Analyse du concept de base ou de la fonction
Définition et fonction de la lecture de l'illusion
Phantom Reading fait référence au renvoi de différents ensembles de résultats lorsque la même requête est exécutée à différents moments dans une transaction. Cela se produit généralement dans un environnement multi-utilisateurs, lorsqu'une transaction est exécutée, une autre transaction insère une nouvelle ligne ou supprime une ligne existante, provoquant la modification du résultat de la transaction précédente.
Par exemple, supposons que la transaction A effectue une requête de plage pour trouver tous les produits qui co?tent moins de 100 $. Lors de l'exécution de la transaction A, la transaction B insère un nouveau record pour 50 $. Lorsque la transaction A exécute à nouveau la même requête, elle trouvera un enregistrement qui n'existait pas auparavant, qui est la lecture fant?me.
Comment ?a marche
La principale raison de la survenue de lecture fantastique est que le niveau d'isolement de la transaction n'est pas assez élevé. La lecture fant?me est possible aux niveaux d'isolement où les lectures ne sont pas soumises et les lectures ont été soumises. Et au niveau d'isolement des lectures et de la sérialisation reproductibles, la base de données prendra des mesures pour empêcher la lecture des fant?mes.
Innodb empêche la lecture de Phantom à travers le verrouillage des touches suivantes. Le verrouillage des touches suivants est un mécanisme de verrouillage qui combine des serrures en ligne et des serrures d'écart. Il verrouille non seulement l'enregistrement lui-même, mais aussi les lacunes entre les enregistrements, empêchant ainsi d'autres transactions d'insérer de nouveaux enregistrements dans ces lacunes.
Regardons un exemple simple pour illustrer le fonctionnement du verrouillage des touches suivantes:
- Transaction A Démarrer la transaction; Sélectionnez * dans les produits où le prix <100 pour la mise à jour; - Transaction B Démarrer la transaction; Insérer dans les valeurs de produits (nom, prix) (?nouveau produit?, 50);
Lorsque la transaction A exécute une instruction SELECT, INNODB verrouille tous les enregistrements avec un prix inférieur à 100 et l'écart entre ces enregistrements. De cette fa?on, la transaction B ne peut pas insérer de nouveaux enregistrements dans ces lacunes, évitant ainsi la lecture fant?me.
Exemple d'utilisation
Utilisation de base
Examinons un exemple plus spécifique de la fa?on dont InNODB utilise le verrouillage des touches suivantes pour empêcher la lecture de Phantom:
- Transaction A Démarrer la transaction; Sélectionnez * dans les commandes où le montant> 1000 pour la mise à jour; - Transaction B Démarrer la transaction; Insérer dans les commandes (Customer_ID, Montant) Valeurs (1, 1500);
Dans cet exemple, la transaction A verrouille toutes les commandes avec un montant supérieur à 1000 et ses lacunes entre eux, et la transaction B essaie d'insérer une nouvelle commande, mais elle sera bloquée jusqu'à ce que la transaction A engage ou recule.
Utilisation avancée
Dans certains cas, nous pouvons avoir besoin d'une plus belle gamme de verrous de contr?le. Par exemple, si nous voulons verrouiller uniquement les enregistrements dans une plage spécifique, nous pouvons utiliser une instruction de verrouillage explicite:
- Transaction A Démarrer la transaction; Sélectionnez * dans l'inventaire où la quantité> 10 et la quantité <20 pour la mise à jour; - Transaction B Démarrer la transaction; Mettre à jour l'inventaire Set Quantity = Quantity - 1 WHERE ITEM_ID = 15;
Dans cet exemple, la transaction A verrouille les enregistrements avec un inventaire entre 10 et 20 et ses lacunes, et la transaction B essaie de mettre à jour les enregistrements avec un inventaire de 15, mais sera bloqué jusqu'à la transaction A A ou des reproductions.
Erreurs courantes et conseils de débogage
Les erreurs courantes lors de l'utilisation du verrouillage de la touche suivante incluent le temps d'attente de verrouillage et l'impasse. Le délai d'attente de verrouillage se produit lorsque la transaction attend que le temps de verrouillage dépasse l'heure du délai d'exécution, tandis que l'impasse se produit lorsque deux transactions ou plus attendent les uns les autres pour libérer le verrou.
Pour déboguer ces problèmes, vous pouvez utiliser les méthodes suivantes:
- Utilisez
SHOW ENGINE INNODB STATUS
pour afficher l'état de verrouillage actuel et les informations sur l'impasse. - Ajustez le paramètre
innodb_lock_wait_timeout
pour augmenter l'heure du délai de verrouillage en attente. - Utilisez le paramètre
innodb_deadlock_detect
pour activer ou désactiver la détection de blocage.
Optimisation des performances et meilleures pratiques
Dans les applications pratiques, le verrouillage des touches suivants peut avoir un impact sur les performances car il augmente les frais généraux du verrouillage. Voici quelques optimisations et meilleures pratiques:
- Minimisez la plage de verrous et verrouillage uniquement les enregistrements et les lacunes nécessaires.
- Le verrouillage optimiste est utilisé pour réduire l'utilisation des verrous, comme la détection des conflits simultanés via les numéros de version.
- Définissez raisonnablement le niveau d'isolement, sélectionnez le niveau d'isolement approprié en fonction des besoins de l'application et évitez le verrouillage inutile.
Dans mon expérience de projet réelle, j'ai rencontré un système de gestion des stocks d'une plate-forme de commerce électronique. En raison de mises à jour et de requêtes fréquentes, elle a causé de graves problèmes de concurrence de verrouillage. En optimisant les instructions de requête et en ajustant les niveaux d'isolement, nous réduisons avec succès le temps d'attente de verrouillage et améliorons les performances de concurrence du système.
En général, la compréhension et l'utilisation correcte du verrouillage des touches suivantes est la clé pour assurer la cohérence des transactions de base de données. J'espère que cet article peut vous aider à mieux ma?triser cette technologie et à éviter les problèmes causés par la lecture fant?me dans des applications pratiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

InnoDB est l'un des moteurs de base de données de MySQL. C'est désormais le moteur de stockage par défaut de MySQL et l'une des normes pour les versions binaires de MySQL AB adopte un système d'autorisation à double voie, l'une est une autorisation GPL et l'autre est un logiciel propriétaire. autorisation. InnoDB est le moteur préféré pour les bases de données transactionnelles et prend en charge les tables de sécurité des transactions (ACID)?; InnoDB prend en charge les verrous au niveau des lignes, qui peuvent prendre en charge dans la plus grande mesure la concurrence. Les verrous au niveau des lignes sont implémentés par la couche moteur de stockage.

Comparaison de sélection du moteur de stockage MySQL?: évaluation de l'indice de performance InnoDB, MyISAM et mémoire Introduction?: Dans la base de données MySQL, le choix du moteur de stockage joue un r?le essentiel dans les performances du système et l'intégrité des données. MySQL fournit une variété de moteurs de stockage, les moteurs les plus couramment utilisés incluent InnoDB, MyISAM et Memory. Cet article évaluera les indicateurs de performances de ces trois moteurs de stockage et les comparera à travers des exemples de code. 1. Moteur InnoDB InnoDB est mon

InnoDB est un moteur de stockage qui stocke les données dans des tables sur disque, de sorte que nos données existeront toujours même après l'arrêt et le redémarrage. Le processus réel de traitement des données se produit en mémoire, de sorte que les données du disque doivent être chargées dans la mémoire. S'il traite une demande d'écriture ou de modification, le contenu de la mémoire doit également être actualisé sur le disque. Et nous savons que la vitesse de lecture et d'écriture sur le disque est très lente, ce qui est plusieurs ordres de grandeur différents de la lecture et de l'écriture en mémoire. Ainsi, lorsque nous voulons obtenir certains enregistrements de la table, le moteur de stockage InnoDB doit-il lire. les enregistrements du disque un par un ? La méthode adoptée par InnoDB consiste à diviser les données en plusieurs pages et à utiliser les pages comme unité de base d'interaction entre le disque et la mémoire. La taille d'une page dans InnoDB est généralement de 16.

1. Restaurez et réinstallez MySQL Afin d'éviter d'avoir à importer ces données depuis d'autres endroits, effectuez d'abord une sauvegarde du fichier de base de données de la bibliothèque actuelle (/var/lib/mysql/location). Ensuite, j'ai désinstallé le package Perconaserver5.7, réinstallé l'ancien package 5.1.71 d'origine, démarré le service mysql, et il a demandé Unknown/unsupportedtabletype:innodb et n'a pas pu démarrer normalement. 11050912:04:27InnoDB?: initialisation du pool de tampons, taille = 384,0 M11050912:04:27InnoDB?: terminé

Les capacités de recherche en texte intégral d'InNODB sont très puissantes, ce qui peut considérablement améliorer l'efficacité de la requête de la base de données et la capacité de traiter de grandes quantités de données de texte. 1) INNODB implémente la recherche de texte intégral via l'indexation inversée, prenant en charge les requêtes de recherche de base et avancées. 2) Utilisez la correspondance et contre les mots clés pour rechercher, prendre en charge le mode booléen et la recherche de phrases. 3) Les méthodes d'optimisation incluent l'utilisation de la technologie de segmentation des mots, la reconstruction périodique des index et l'ajustement de la taille du cache pour améliorer les performances et la précision.

1. Niveau d'isolement des transactions Mysql Ces quatre niveaux d'isolement, lorsqu'il y a plusieurs conflits de concurrence de transactions, certains problèmes de lecture sale, de lecture non répétable et de lecture fant?me peuvent survenir, et innoDB les résout en mode niveau d'isolement de lecture répétable. de la lecture fant?me, 2. Qu'est-ce que la lecture fant?me ? La lecture fant?me signifie que dans la même transaction, les résultats obtenus en interrogeant la même plage deux fois avant et après sont incohérents, comme le montre la figure. Dans la première transaction, nous exécutons une requête de plage. à l'heure actuelle, il n'y a qu'une seule donnée qui remplit les conditions. Dans la deuxième transaction, il insère une ligne de données et la soumet. Ensuite, lorsque la première transaction est à nouveau interrogée, le résultat obtenu est un de plus que le résultat de. la première requête Data, notez que les première et deuxième requêtes de la première transaction sont toutes deux identiques.

InnODB atteint l'atomicité par undolog, la cohérence et l'isolement par le mécanisme de verrouillage et le MVCC, et la persistance par redolog. 1) Atomicité: Utilisez undolog pour enregistrer les données d'origine pour vous assurer que la transaction peut être annulée. 2) Cohérence: assurez la cohérence des données via le verrouillage au niveau des lignes et le MVCC. 3) Isolement: prend en charge plusieurs niveaux d'isolement et RepeatableRead est utilisé par défaut. 4) Persistance: utilisez Redolog pour enregistrer des modifications pour garantir que les données sont enregistrées pendant longtemps.

MySQL est un système de gestion de bases de données largement utilisé et différents moteurs de stockage ont des impacts différents sur les performances des bases de données. MyISAM et InnoDB sont les deux moteurs de stockage les plus couramment utilisés dans MySQL. Ils ont des caractéristiques différentes et une mauvaise utilisation peut affecter les performances de la base de données. Cet article explique comment utiliser ces deux moteurs de stockage pour optimiser les performances de MySQL. 1. Moteur de stockage MyISAM MyISAM est le moteur de stockage le plus couramment utilisé pour MySQL. Ses avantages sont une vitesse rapide et un petit espace de stockage. MonISA
