MySQL Konfiguration - Große Insert Dumps

luco

Registered User
Hallo,

ich stehe vor einem Problem wo ich selber nicht wirklich weiterkomme.
Ich habe eine Tabelle in der Produktdaten hinterlegt sind also Name,Beschreibung,BildURL,Preis usw. nichts außergewöhnliches Zeilengröße im Schnitt 716 Bytes sagt phpmyadmin.

Aktuell sind ca 3 Millionen Produkte hinterlegt, da die Quellen für die Produktdaten in unregelmäßigen Abständen aktualisiert werden müssen Produkte gelöscht und dann wieder neu eingelesen werden

Um das ganze etwas zu beschleunigen liegen die neuen Daten bereit als Mysql-Dumps vor, welche einfache Insert Befehle enthalten.
Schon "kleinere" Dumps von <100 MB Größe zwingen den MySQL Server absolut in die Knie. Der Load liegt weit über 10 und der Dump dauert mitunter 10 Minuten

Frage ist das normal? Oder lässt sich daran etwas optimieren?
Die Tabelle selbst hat einen FULLTEXT Index auf Name,Beschreibung für die Suche sowie Indizes, sodass schnell nach Shop oder direkt nach ProduktID gesucht werden kann.

Gibt es vielleicht daran etwas zu optimieren?

Die wichtigsten Systemvariablen sind:
key_buffer = 256M
max_allowed_packet = 64M
sort_buffer_size = 2K
read_buffer_size = 128K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 16M
set-variable = max connections=500

Bei dem Server handelt es sich um einen DualCore AMD Opteron mit 2.6 Ghz und 2 GB RAM

Wäre echt dankbar wenn ihr mir das Brett vorm Kopf wegnehmen könntet
Oder geht es einfach nicht schneller unter den Umständen?

Vielen Dank für eure Tipps
 
Also an der Konfiguration sehe ich auf den ersten Blick nichts schlimmes. Ich selbst muss auch oft MySQL Dumps mit mehreren 100MB und mehreren Millionen Datensätzen auf Servern importieren, großteils MySQL-Standard-Konfigurationen. Das dauert dann aber ebenfalls einige Minuten und braucht sehr viel Leistung. Und wie du richtig erkannt hast, ein Index wie z.B. FULLINDEX dauert da einfach länger. Denn im Dump sind ja nur die Datensätze, den Index an sich muss MySQL dann ja erst selbst bilden, und das dauert leider gleich um ein vielfaches länger.

Du könntest maximal die MySQL Prozesse auf andere Nice Werte setzen, während du die Daten einfügst, damit wenigstens nicht so viele andere Prozesse beeinträchtigt werden, denn ein Load von 10 ist schon etwas heftig.


MfG Christian
 
Während des Inserts lockst Du die Tables aber schon?
Nicht daß für jede Zeile alle Indices neu berechnet werden?
 
Back
Top