Ich habe ein SQL-Dump, es ist ziemlich groß (411 MB) und es dauerte 10 Minuten, um auf Server A zu importieren, der gleiche Import auf meiner Workstation B hat eine Schätzung (Pipeviewer) von 8 Stunden, um zu importieren (es importierte 31 MB in 40 Minuten) ) Das ist also Faktor 53 langsamer.
Die Spezifikationen:
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
Die mysql / maria-Konfiguration ist die Standardkonfiguration.
Ich bin gestern auf meiner Workstation auf MariaDB umgestiegen - aber vor MariaDB waren die Statistiken noch schlimmer.
Ich habe bereits alle Datenbanken auf meiner Workstation entfernt - kein Unterschied.
Die große Frage ist: Wie kann die Leistung um den Faktor 53 langsamer sein? Ich kann nicht so arbeiten :-(
Mein Importbefehl:
pv sql/master.sql | mysql -h'localhost' -u'root' -p'root' 'master'
iostat -xm 5
Server 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
Arbeitsstation 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
Server A:
1073741824 bytes (1,1 GB) copied, 18,6947 s, 57,4 MB/s
Arbeitsstation B:
1073741824 bytes (1,1 GB) copied, 8,95646 s, 120 MB/s
quelle
innodb_buffer_pool_size
auf jeder Maschine?Antworten:
Diese Antwort hat alles sehr beschleunigt:
/programming//a/2167641/292408
Ich habe einfach
am Anfang und
Am Ende.
Jetzt hat es 3 Minuten gedauert.
(Mit freundlicher Genehmigung von @andreasemer via Twitter)
quelle
Ergänzt das, was ich oben sehe ... Ich habe meine Dump-Datei bereits automatisch generiert durch etwas wie:
Ich möchte diesen Import automatisieren , damit ich erstellt zwei Dateien in meinem Computer genannt
default-start-import.sql
unddefault-end-import.sql
und deren Inhalte sind default-Start-import.sql :und default-end-import.sql :
und das Skript, das ich ausführe, ist ungefähr so;
Gleicher Befehl, aber leichter zu lesen:
In diesem Fall
cat
werden diese Dateien verkettet, bevor sie an die Pipe gesendet werden. Ich halte es für wichtig, dass alle Dateien mit einem Zeilenumbruchszeichen enden (eine leere Zeile am Ende der Datei, wenn sie in einem Texteditor angezeigt wird), damit dercat
Befehl keine Zeilen zwischen Dateien zusammenfügt.Der Import funktioniert einwandfrei. Ich habe nicht getestet, ob er aufgrund der Verbesserung der Funktion zum Aktivieren und Deaktivieren der automatischen Festschreibung tatsächlich schneller ist. Wenn dies jedoch zu einer Beschleunigung führt, erleichtern diese zusätzlichen Schritte die Arbeit.
quelle
Ich habe es
--compress
genauso gut versuchtSET autocommit=0;
und sie halfen jedoch eine kleine Menge ...Ich habe festgestellt, dass das Konvertieren mehrerer
INSERT INTO ...
Anweisungen in eine große Anweisung mit mehrerenVALUES(...), (...)
Geschwindigkeitsverbesserungen erheblich ist.Ich verwende
mysql
über SSL über WAN. Die entfernte MySQL-Datenbank wird auf Amazon gehostet.Mit 9 Spalten und 2.100 Zeilen:
INSERT
Aussagen: 82sINSERT
: <1sMit 7 Spalten und 42.000 Zeilen:
INSERT
Aussagen: 1.740erINSERT
: 105sJe nach dem Tool, das den Datenbankspeicherauszug generiert (oder genauer gesagt, dem Format der
INSERT
Anweisungen), kann die Geschwindigkeit beeinflusst werden.Hinweis: Dadurch
.sql
wird die Speicherauszugsdatei in meinen Tests um über 60% verringert , sodass auch E / A eingespart werden.Warnung: Diese Technik
mysql
unterliegt physischen Einschränkungen und ist nur für diejenigen geeignet, die Portabilität benötigen. SQL Server ist anscheinend auf jeweils nur 1.000 Zeilen beschränkt .Wenn Sie jedoch für 42.000 Zeilen jeweils 1.000 Zeilen gleichzeitig ausführen, ergibt sich eine Verbesserung von 1.657%!
quelle