2010-08-10 9 views
0

Nous avons une table MySQL 8 millions de lignes. Nous voulons supprimer environ 2m lignes, supprimer des index obsolètes et en ajouter de nouveaux. Pour réaliser presque aucun temps d'arrêt, notre plan est de créer un clone de la table (et verrouiller l'original), exécuter un script (Ruby) pour élaguer les données dont nous n'avons plus besoin et enfin ajouter les nouveaux index. Ensuite, nous mettrions en place la page de maintenance sur l'application Web, échangez leurs noms (en renommant les tables) et redémarrez l'application.MySQL cloner une table, élaguer des données et ensuite hotswap leurs noms

Est-ce la meilleure façon d'atteindre nos résultats finaux? D'autres conseils/suggestions de personnes qui ont déjà quelque chose de similaire? Quel est le meilleur moyen (cmds secrètes mysql super cool) de cloner la table? Meilleur/le plus rapide moyen de supprimer des lignes en masse?

+0

Combien de temps faut-il pour exécuter votre script actuel? Une idée? – MikeTWebb

+0

Essayer d'obtenir un serveur de mise en attente à temps le script, mais Amazon EC2 me donne des erreurs de capacité –

Répondre

2
  1. Toutes les références utilisent une vue, ne pas lire directement à partir old_table
  2. Créer new_table
  3. Sélectionnez vos références dans new_table, ne pas apporter le long des enregistrements des enregistrements à supprimer
  4. Index new_table
  5. Mettre à jour la vue, remplacer old_table références par new_table
  6. Renommer old_table

Traiter ancienne_table quand vous voulez.

Le vrai problème est de nouvelles données pendant le processus de transition, ce qui signifie généralement des temps d'arrêt. Heureusement, vous pouvez simplement désactiver la possibilité d'ajouter des données plutôt que de supprimer tout le site.

+0

Il peut y avoir un moyen de faire tout cela en SQL droit, aussi, si vous voulez plus de vitesse ... – rogerdpack

+0

Pourquoi utiliser des vues? pourriez-vous s'il vous plaît entrer dans plus de détails –

+0

@Jose Fernandez: Parce que vous pouvez changer la table (s) référencée par une vue à volonté; les références existantes ne sont pas interrompues pendant la migration entre les anciennes et les nouvelles tables car la vue est encapsulée. –