Tengo un volcado de SQL, es bastante grande (411 MB) y tardé 10 minutos en importar en el servidor A, la misma importación en mi estación de trabajo B tiene un estimado (visor de tuberías) de 8 horas para importar (importó 31 MB en 40 minutos ) Entonces este es el factor 53 más lento.
Las especificaciones:
Server A:
   MySQL Version: 5.5.30-1.1 (Debian)
   2 GB RAM
   1 core QEMU Virtual CPU version 1.0 - cpu MHz: 3400.020
Workstation B: 
   MySQL Version: 5.5.41-MariaDB-1ubuntu0.14.04.1
   14 GB RAM
   4 cores Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz - cpu MHz: 1600.000
La configuración mysql / maria es la configuración estándar.
Ayer cambié a MariaDB en mi estación de trabajo, pero antes de MariaDB las estadísticas eran aún peores.
Ya eliminé todas las bases de datos en mi estación de trabajo, no hay diferencia.
La gran pregunta es: ¿cómo puede el rendimiento ser un factor 53 más lento? No puedo trabajar así :-(
Mi comando de importación:
pv sql/master.sql | mysql -h'localhost' -u'root' -p'root' 'master'
iostat -xm 5
servidor A:
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
      17,43    0,00   30,28   51,85    0,00    0,44
Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0,00   254,03    0,00 1305,45     0,00     6,09     9,56     0,78    0,60    0,00    0,60   0,57  74,25
estación de trabajo B:
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
       7,32    0,00    3,22    5,03    0,00   84,42
Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0,00     1,40    0,80  172,40     0,00     0,56     6,72     1,17    6,75   12,00    6,72   5,40  93,52
dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc
servidor A:
1073741824 bytes (1,1 GB) copied, 18,6947 s, 57,4 MB/s
estación de trabajo B:
1073741824 bytes (1,1 GB) copied, 8,95646 s, 120 MB/s
                fuente

innodb_buffer_pool_sizeen cada máquina?Respuestas:
Esta respuesta aceleró mucho todo:
/programming//a/2167641/292408
Yo simplemente
al principio y
al final.
Ahora tomó 3 minutos.
(Cortesía de @andreasemer a través de twitter)
fuente
Complementando lo que veo arriba ... Tengo mi archivo de volcado ya generado automáticamente por algo como:
Quiero automatizar este importación así que creé dos archivos en el ordenador llamadas
default-start-import.sqlydefault-end-import.sqly sus contenidos son por defecto de principio import.sql :y default-end-import.sql :
y el script que ejecuto es algo como esto;
mismo comando pero más fácil de leer:
En este caso
catse usa para concatenar esos archivos antes de enviarlos a la tubería. Creo que es importante que todos los archivos terminen con un carácter de nueva línea (una línea vacía al final del archivo si se ve desde un editor de texto) para que elcatcomando no combine líneas entre archivos.La importación funciona bien, no he probado si en realidad es más rápida debido a esta mejora en la cosa de habilitar y deshabilitar la confirmación automática, pero si eso hace que las cosas sean más rápidas, estos pasos adicionales lo hacen más fácil.
fuente
Lo he intentado
--compresstan bienSET autocommit=0;y sin embargo ayudaron un poco ...Descubrí que convertir múltiples
INSERT INTO ...declaraciones en una declaración grande conVALUES(...), (...)velocidad mejorada múltiple considerablemente.Estoy usando
mysqlsobre SSL sobre WAN. La base de datos remota de MySQL está alojada en Amazon.Con 9 columnas y 2,100 filas:
INSERTdeclaraciones separadas : 82sINSERTestados consolidados : <1sCon 7 columnas y 42,000 filas:
INSERTdeclaraciones separadas : 1,740sINSERTestado consolidado : 105sEntonces, dependiendo de la herramienta que genera el volcado de la base de datos (o más específicamente el formato de las
INSERTdeclaraciones), la velocidad puede verse influenciada.Nota: Esto también disminuye el
.sqlarchivo de volcado en más del 60% en mis pruebas, por lo que también se guardará en E / S.Advertencia: existen limitaciones físicas para esta técnica con
mysqly para aquellos que necesitan portabilidad ... SQL Server parece estar limitado a solo 1,000 filas a la vez.Aún así, ¡hacer 1,000 filas a la vez por 42,000 filas aún produce una mejora del 1,657%!
fuente