Comment supprimer des millions de lignes MySQL sans temps d'arrêt
Face à un bug qui entraînait des millions de lignes en double, trouver une suppression une stratégie qui minimise les temps d'arrêt est cruciale.
Une option consiste à exécuter de nombreuses requêtes de suppression plus petites en boucle. Cependant, cette approche peut surcharger la base de données et allonger le processus de suppression.
Une autre option consiste à renommer la table existante, à en créer une nouvelle vide, à effectuer un nettoyage sur la table renommée, puis à fusionner les données dans la table renommée. tableau original. Bien que cette méthode offre une interruption minimale, elle s'accompagne de défis logistiques, notamment une perte potentielle de données et la nécessité d'une fusion méticuleuse des données.
Une solution plus efficace consiste à exécuter la requête suivante en boucle, avec une courte période de veille. entre les itérations :
DELETE FROM `table` WHERE (whatever criteria) ORDER BY `id` LIMIT 1000
En limitant la suppression à 1000 lignes à la fois et en ajoutant un court intervalle de veille, cette technique permet à d'autres requêtes de s'entrelacer et empêche le verrouillage de la table. Au fur et à mesure des itérations, le nombre de lignes affectées diminuera progressivement jusqu'à ce qu'il n'en reste plus aucune.
Cette approche allie efficacité et temps d'arrêt minimal, ce qui en fait un choix approprié pour supprimer de gros volumes de lignes sans perturber les fonctionnalités du site ou l'expérience utilisateur.
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!