InnoDB prend plus d'une heure pour importer fichier de 600 mo, MyISAM en quelques minutes

Je suis actuellement en train de travailler sur la création d'un environnement de tester les performances d'une application; je suis en essais avec MySQL et InnoDB pour savoir ce qui peut servir le meilleur de nous. Au sein de cet environnement, nous allons préparer automatiquement la base de données (charge existant décharges) et de l'instrument de nos outils de test.

Je suis en train de préparer de tester la même vidage des données avec MySQL et InnoDB, mais je suis déjà à défaut d'apporter de l'importation initiale à une utilisable de la vitesse pour le InnoDB partie. La première dump a pris plus de temps, mais cela n'a pas concerné moi encore:

$ for i in testdb_myisam testdb_innodb; do time mysqldump --extended-insert $i > $i.sql; done

real    0m38.152s
user    0m8.381s
sys     0m2.612s

real    1m16.665s
user    0m6.600s
sys     0m2.552s

Toutefois, l'importation de fois ont été très différentes:

$ for i in  testdb_myisam testdb_innodb; do time mysql $i < $i.sql; done

real    2m52.821s
user    0m10.505s
sys     0m1.252s

real    87m36.586s
user    0m10.637s
sys     0m1.208s

Après recherche je suis arrivé sur Tables à langer à partir de MyISAM pour InnoDB faire ralentir le système et ensuite utilisé set global innodb_flush_log_at_trx_commit=2:

$ time mysql testdb_innodb < testdb_innodb.sql

real    64m8.348s
user    0m10.533s
sys     0m1.152s

À mon humble avis encore terriblement lente. J'ai aussi désactivé log_bin pour ces tests et voici une liste de toutes les variables mysql.

Faire j'ai accepter cette longue InnoDB fois ou peuvent-ils être améliorés? J'ai le plein contrôle sur ce serveur MySQL que c'est purement pour cet environnement de test.

Que je peux appliquer des configurations spéciales uniquement pour l'importation initiale et de les modifier pour les applications de tests afin qu'ils correspondent mieux les environnements de production.

Mise à jour:

Donné les commentaires, j'ai désactivé autocommit et les différents contrôles:

$ time ( echo "SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0;" \
; cat testdb_innodb.sql ; echo "COMMIT;" ) | mysql testdb_innodb;date

real    47m59.019s
user    0m10.665s
sys     0m2.896s

La vitesse améliorée, mais pas tant que ça. Est mon test imparfait?

Mise à jour 2:

J'ai été en mesure d'accéder à une autre machine ont été importations a seulement pris environ 8 minutes. J'ai comparé les configurations et appliqué les paramètres suivants pour mon installation de MySQL:

innodb_additional_mem_pool_size = 20971520
innodb_buffer_pool_size = 536870912
innodb_file_per_table
innodb_log_buffer_size = 8388608
join_buffer_size = 67104768
max_allowed_packet = 5241856
max_binlog_size = 1073741824
max_heap_table_size = 41943040
query_cache_limit = 10485760
query_cache_size = 157286400
read_buffer_size = 20967424
sort_buffer_size = 67108856
table_cache = 256
thread_cache_size = 128
thread_stack = 327680
tmp_table_size = 41943040

Avec ces réglages, je suis maintenant à environ 25 minutes. Encore loin de la à quelques minutes MyISAM prend, mais il devient de plus en plus utilisable pour moi.

  • Vous savez quoi? Nous devrions vraiment nous avons déplacé cette à serverfault. A voté pour le faire. Bonne chance.
  • Semble raisonnable. Est-il rien de ma part je peux/dois faire?
InformationsquelleAutor mark | 2010-01-30