50 Stimmen

Beschleunigung von mysql-Dumps und Importen

Gibt es dokumentierte Techniken zur Beschleunigung von mySQL-Dumps und Importen?

Dazu gehören my.cnf-Einstellungen, die Verwendung von Ramdisks usw.

Ich suche nur nach dokumentierten Techniken, vorzugsweise mit Benchmarks, die eine mögliche Beschleunigung zeigen.

24voto

JBB Punkte 4215
  1. Holen Sie sich eine Kopie von Hochleistungs-MySQL . Tolles Buch.
  2. Erweiterte Einsätze in Deponien
  3. Dump mit dem Format --tab, damit Sie mysqlimport benutzen können, das schneller ist als mysql < dumpfile
  4. Import mit mehreren Threads, einen für jede Tabelle.
  5. Verwenden Sie nach Möglichkeit eine andere Datenbank-Engine. stark transaktionalen Engine wie innodb ist furchtbar langsam. Das Einfügen von in eine nicht-transaktionale Engine wie MyISAM ist viel, viel schneller.
  6. Sehen Sie sich das Skript zum Tabellenvergleich im Maakit-Toolkit an und prüfen Sie, ob Sie Ihre Tabellen aktualisieren können, anstatt sie zu löschen und zu importieren. Aber Sie sprechen wahrscheinlich von Backups/Wiederherstellungen.

15voto

Alister Bulman Punkte 33148

http://www.maatkit.org/ hat ein mk-parallel-dump und mk-parallel-restore

Wenn Sie sich ein Multithreading-fähiges mysqldump gewünscht haben, brauchen Sie sich nichts mehr zu wünschen. Dieses Tool dumpt MySQL-Tabellen parallel. Es ist ein viel intelligenteres mysqldump, das entweder als Wrapper für mysqldump (mit vernünftigem Standardverhalten) oder als Wrapper für SELECT INTO OUTFILE fungieren kann. Er wurde für Hochleistungsanwendungen mit sehr großen Datenmengen entwickelt, bei denen Geschwindigkeit eine große Rolle spielt. Es nutzt die Vorteile von mehreren CPUs und Festplatten, um Ihre Daten viel schneller zu dumpen.

Es gibt auch verschiedene potenzielle Optionen in mysqldump, wie z.B. keine Indizes zu erstellen, während der Dump importiert wird - sondern sie stattdessen en-mass bei der Fertigstellung zu erstellen.

3 Stimmen

Laut der Manpage von mk-parallel-dump ( maatkit.org/doc/mk-parallel-dump.html ) sollte es nicht zur Sicherung verwendet werden. Vorsicht!

2 Stimmen

Maatkit ist jetzt Teil des Percona Toolkit ( launchpad.net/percona-toolkit )

2 Stimmen

Wie lautet der Name des Befehls in percona-toolkit?

13voto

Wenn Sie nach InnoDB importieren, ist das effektivste, was Sie tun können, die

innodb_flush_log_at_trx_commit = 2

in Ihrem my.cnf vorübergehend, während der Import läuft. Sie können ihn zurücksetzen auf 1 wenn Sie ACID benötigen.

0 Stimmen

Ich frage mich, ob die Einstellung auf 0 noch schneller sein?

0 Stimmen

Ich habe nicht wirklich verstanden, was dies bewirkt, aber es hat die Wiederherstellung meines großen innoDB-Datenbank-Dumps beschleunigt. für MyISAM-Datenbanken erhöht key_buffer_size geholfen (auf 30% des verfügbaren Speichers).

1 Stimmen

Nur aus Neugier, macht SET autocommit=0 dies unnötig?

5voto

Ztyx Punkte 12604

Ich denke, Ihre Frage hängt auch davon ab, wo der Engpass liegt:

  • Wenn Ihr Netzwerk ein Engpass ist, können Sie auch einen Blick auf die -C / --compress Flagge zu mysqldump .
  • Wenn Ihrem Computer der Speicher ausgeht (d.h. er beginnt zu swappen), sollten Sie mehr Speicher kaufen.

Werfen Sie auch einen Blick auf die --quick Flagge für mysqldump (und --disable-keys wenn Sie MyIsam verwenden).

0 Stimmen

Referenz sagt --disable-keys ist "nur für nicht eindeutige Indizes von MyISAM-Tabellen wirksam".

0 Stimmen

Kapep - danke für die Korrektur. Ich habe die Antwort aktualisiert.

4voto

che Punkte 11861

Die Verwendung von erweiterten Einfügungen in Dumps sollte die Importe beschleunigen.

1 Stimmen

Wenn Sie das tun, besteht eine gute Chance, dass Sie nicht in der Lage sind, die Daten wieder zu importieren, wenn der Dump auch nur mäßig groß ist.

0 Stimmen

Wie kommt es, dass der MySQL-Client nicht in der Lage ist, auch nur mittelgroße Dumps mit erweiterten Inserts zu verarbeiten?

0 Stimmen

Ich vermute, dass der Client eine feste Puffergröße für jede gelesene Zeile hat und erweiterte Einfügungen diese Grenze überschreiten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X