Actualmente estoy trabajando en la creación de un entorno para probar el rendimiento de una aplicación; Estoy probando con MySQL e InnoDB para averiguar cuál nos puede servir mejor. Dentro de este entorno, prepararemos automáticamente la base de datos (carga de volcados existentes) e instrumentaremos nuestras herramientas de prueba.InnoDB tarda más de una hora en importar archivos de 600MB, MyISAM en unos minutos
Estoy preparando para probar el mismo volcado de datos con MySQL e InnoDB, pero ya no estoy logrando llevar la importación inicial a una velocidad útil para la pieza InnoDB. El vertedero inicial tomó más tiempo, pero eso no me preocupa aún:
$ 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
Sin embargo, los tiempos de importación eran muy diferentes:
$ 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
Después de una investigación que vine Changing tables from MyISAM to InnoDB make the system slow y luego se usa 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
En mi humilde opinión todavía sorprendentemente lento. También he desactivado log_bin
para estas pruebas y aquí hay una lista de all mysql variables.
¿Tengo que aceptar este largo InnoDB veces o se pueden mejorar? Tengo el control total sobre este servidor MySQL, ya que es puramente para este entorno de prueba.
Puedo aplicar configuraciones especiales solo para la importación inicial y volver a cambiarlas para pruebas de aplicaciones para que coincidan mejor con los entornos de producción.
Actualización:
Teniendo en cuenta las votaciones, he confirmación automática desactivada y los diferentes controles:
$ 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 velocidad mejorada, pero no tanto. ¿Mi prueba es defectuosa?
Actualización 2:
pude tener acceso a una máquina diferente eran las importaciones sólo tomó unos 8 minutos. Comparé las configuraciones y apliqué las siguientes configuraciones a la instalación 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
Con estas configuraciones, ahora tengo unos 25 minutos. Aún muy lejos de los pocos minutos que lleva MyISAM, pero se está volviendo más útil para mí.
¿Sabes qué? Realmente deberíamos haber movido esto a serverfault. Votado para hacer eso. Buena suerte. –
@ T.J. Suena razonable. ¿Hay algo de mi parte que pueda/deba hacer? – mark