Apprentissage recommandé : Tutoriel vidéo mysql
Avant de modifier la structure de la table, examinons les problèmes possibles.
MySQL a un verrou appelé verrouillage des métadonnées MDL Lorsque la table est modifiée, ce verrou sera automatiquement ajouté à la table, c'est-à-dire qu'il n'est pas nécessaire de l'utiliser explicitement.
La lecture et la lecture ne s'excluent pas mutuellement. write, write et write s'excluent mutuellement, donc
Et une fois le MDL verrouillé, il ne sera libéré qu'après la soumission de la transaction actuellement demandée si elle l'est. une longue transaction, ou il y a une grande quantité de données en ligne, et le verrou en écriture MDL est verrouillé par défaut lors de la modification de la structure de la table, ce qui prendra beaucoup de temps et bloquera d'autres requêtes ultérieures.
Imaginez un scénario où A(select), B(alter), C(select), D(select)... sont des requêtes pour la même table MySQL en séquence. Ces requêtes formeront une file d'attente.
Lorsque A (sélectionner) acquiert le verrou de lecture MDL de la table, il bloquera B (modifier), car B doit ajouter un verrou d'écriture MDL. Une fois B bloqué, les autres requêtes dans la file d'attente seront bloquées. , provoquant finalement l'épuisement des connexions disponibles de Mysql, des délais d'attente des demandes et d'autres problèmes.
Compte tenu du verrou MDL ci-dessus, nous savons que la modification de la structure de la table bloquera d'autres requêtes normales, l'opération de modification doit donc être effectuée en dehors des heures de pointe, habituellement, mettez-le à 2h-4h du matin.
Étapes spécifiques :
Le problème avec la solution ci-dessus est que lorsque la quantité de données est importante, l'importation des données prend du temps et pendant ce processus, le service est inaccessible.
Amélioration :
Créez une nouvelle table A_new, qui contient plusieurs champs de plus que la table d'origine Abonnez-vous à la table A d'origine via l'abonnement aux données et synchronisez les données de la table en ligne A avec cette nouvelle table dans A_new. , ce processus se poursuivra et la table A pourra être ajoutée, supprimée, modifiée et vérifiée au cours de ce processus. Il y aura toujours un moment où les données des deux tables seront complètement synchronisées et il n'y aura aucune différence dans les données. cette fois, l'original Le nom de la table A est modifié et la nouvelle table A_new est modifiée en table A d'origine. Cette opération est une opération courte et peut être complétée instantanément sans impact significatif.
Avantages et inconvénients :
Apprentissage recommandé : Tutoriel vidéo MySQL
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!