wurde auf Serverfault neu gepootst
Frage 1: Wenn die Größe der Datenbanktabelle größer wird, wie kann ich MySQL anpassen, um die Geschwindigkeit des LOAD DATA INFILE-Aufrufs zu erhöhen?
Frage 2: Verwenden Sie einen Cluster von Computern, um verschiedene CSV-Dateien zu laden, die Leistung zu verbessern oder sie zu töten? (Dies ist meine Benchmark-Aufgabe für morgen mit den Ladedaten und Bulk-Inserts)
Wir testen verschiedene Kombinationen von Feature-Detektoren und Clustering-Parametern für die Bildsuche. Daher müssen wir in der Lage sein, große Datenbanken zeitnah zu erstellen.
Die Maschine hat 256 Gigabyte RAM und es gibt noch zwei weitere Maschinen mit der gleichen Anzahl an Ram, wenn es eine Möglichkeit gibt, die Erstellungszeit durch die Verteilung der Datenbank zu verbessern?
Das Tabellenschema sieht wie
aus%Vor%
Der erste Schritt bestand darin, Masseneinfügungen mit dem Laden aus einer Binärdatei in eine leere Tabelle zu vergleichen.
%Vor%Angesichts des Unterschieds in der Leistung, die ich mit dem Laden der Daten aus einer binären CSV-Datei gegangen bin, habe ich zuerst Binärdateien geladen, die 100K-, 1M-, 20M-, 200M-Zeilen enthalten, indem ich den folgenden Aufruf verwende.
%Vor%
Ich habe die 200M Zeilen-Binärdatei (~ 3GB CSV-Datei) nach zwei Stunden gelöscht.
Ich habe also ein Skript ausgeführt, um die Tabelle zu erstellen, und verschiedene Zeilennummern aus einer Binärdatei einzufügen und dann die Tabelle zu löschen, siehe folgende Grafik.
Es dauerte ungefähr 7 Sekunden, um 1M Zeilen aus der Binärdatei einzufügen. Als nächstes entschied ich mich für das Benchmarking von 1M Zeilen gleichzeitig, um zu sehen, ob es bei einer bestimmten Datenbankgröße zu einem Flaschenhals kommen würde. Sobald die Datenbank ungefähr 59 Millionen Zeilen erreichte, fiel die durchschnittliche Einfügezeit auf ungefähr 5.000 / Sekunde
Durch das Setzen des globalen Schlüssels key_buffer_size = 4294967296 wurden die Geschwindigkeiten beim Einfügen kleinerer Binärdateien etwas verbessert. Die folgende Grafik zeigt die Geschwindigkeiten für verschiedene Zeilenzahlen
Allerdings hat das Einfügen von 1M Zeilen die Leistung nicht verbessert.
Reihen: 1,000,000 mal: 0: 04: 13,761428 Einsätze / sec: 3,940
vs für eine leere Datenbank
Reihen: 1,000,000 Zeit: 0: 00: 6,339295 Einsätze / sec: 315,492
Tags und Links optimization mysql binaryfiles large-data query-optimization