MySQL: Truncate Table dans la Transaction?

J'ai une table InnoDB qui doit être re-rempli toutes les dix minutes à l'intérieur de n'importe où à partir de 60k à 200k enregistrements. Notre approche jusqu'à ce point a été comme suit:

  1. Désactiver la Validation automatique
  2. Tronquer la table
  3. Effectuer des Requêtes Select & Calculs supplémentaires (à l'aide de PHP)
  4. Insérer de nouveaux enregistrements
  5. Commettre

Après le Tronquer opération est effectuée cependant, les données sont immédiatement supprimé et n'est plus disponible à partir de l'Interface Utilisateur. Pour nos utilisateurs, cela a été assez déconcertant, même si dans un délai d'environ 30 secondes ou si le script rencontres de l'opération de validation et le tableau est rempli de nouveau.

J'ai pensé que je pourrais peut-être envelopper l'ensemble de l'opération, y compris la Truncate, dans une transaction, et que cela pourrait réduire la durée de temps pendant laquelle le tableau est vide pour les utilisateurs. J'ai donc changé SET AUTOCOMMIT=0 à START TRANSCATION.

Aïe! Cela a eu l'effet inverse de celui désiré! Maintenant, le TRUNCATE opération se produit toujours au début du script, mais il faut beaucoup plus à l'exécution de la INSERT opérations à l'intérieur de la transaction, de sorte que le temps que les COMMIT opération prend de la place et les données de la table est de nouveau disponible, il a été près de dix minutes!

Ce qui pourrait éventuellement en être la cause? Honnêtement, je ne m'attendais pas à tout changement, parce que j'étais sous l'impression que le lancement d'une opération fondamentalement juste éteint Autocommit de toute façon??

InformationsquelleAutor Brian Lacy | 2011-05-12