2011-02-15 3 views
3

J'ai un script qui met à jour localhost, puis dumps les résultats mis à jour RemoteHost:réparer par le tri?

mysqldump --skip-tz-utc --no-create-info --insert-ignore --host=localhost -u u -ppass db table --where=\"timeStamp > FROM_UNIXTIME($time)\" | mysql -h remote -u u -ppass db 

Avec 20 dossiers, la mise à jour localhost est très rapide (quelques secondes), mais la décharge à RemoteHost prend plus de 4 minutes ... quand je regarde mysql workbench, il dit que l'état de l'hôte distant est "Repair by Sorting" et la colonne Info est "/ *! 40000 ALTER TABLE" table 'ENABLE KEYS */".

Que signifie ce message (et pourquoi est-il si long de vider vers remotehost avec si peu d'enregistrements)?

thx

Répondre

3

mysqldump est invalidante index, l'insertion des disques, et réactiver les index. Cela signifie qu'il affecte la totalité de la table, y compris les nombreux autres enregistrements auxquels je m'attends en fonction de l'heure.

Ajouter --skip-disable-keys aux arguments pour mysqldump et qui devrait cesser de se produire.

+0

l'ajout de l'option "skip-triggers" est-il une bonne idée? –

+0

Cela dépend si vous modifiez les déclencheurs et en avez besoin sauvegardés. Je devine à partir de votre modèle d'utilisation que sauter des déclencheurs est logique, mais vous devrez en regarder les détails vous-même pour être sûr. –

6

mysqldump va faire trois choses à une table pendant la recharge

CLÉS DISABLE;

insertions multiples

clés; ENABLE

Lorsque vous désactivez les clés, cela désactive en réalité les index non uniques.

Les clés primaires et les clés uniques sont chargées immédiatement. Une fois que ENABLE KEYS est démarré, tous les index non uniques sont ensuite construits en utilisant 'Repair By Sorting'; Si vous contournez DISABLE KEYS et ENABLE KEYS, vous allez aggraver la situation, car les clés primaires, les clés uniques et les clés non uniques sont construites ligne par ligne. C'est en interne une opération messier pour que MySQL ait à effectuer POUR UNE CHARGE COMPLÈTE D'UNE TABLE !!!

Comme il y a si peu de données ajoutées, faire des --skip-disable-keys comme 'Autocracy' est à la fois sage et concis.

BTW s'applique uniquement aux tables MyISAM. InnoDB ignore DISABLE KEYS et ENABLE KEYS.

+5

Je pense que vous m'avez plus troublé ... vous dites que si je contourne les touches de désactivation, je vais aggraver les choses mais dites-moi de le faire 1 paragraphe plus tard. J'ai implémenté la solution d'Autocratie ... est-ce que je devrais faire? –

+1

Ce serait encore pire si on chargeait un grand nombre de lignes dans une table vide avec beaucoup d'index. En désactivant les clés et en les activant à la fin, le processus de construction d'index, en particulier sur un grand nombre de lignes insérées dans une table vide, est optimisé (vous le faites une fois à la fin, et il n'y a pas d'autres données se préoccuper de). Cependant, disons que vous insérez une ligne dans 100 millions, il est plus efficace de rééquilibrer l'index à la volée que de la laisser tomber et de la créer à partir de zéro ... Je pense que c'est tout de même ;-) – Dan