Hi Leute,
sicher ein Tema welches schon oft diskutiert wurde. Es geht bei der INSERT und bei der UPDATE Anweisung um die Preformance.
Sicher sind meine Indexe und SQL-Statements nicht die besten. Da ließe sich sicher noch einiges herausholen. Aber ich sags mal so: Trotz der Zugriffe die wir verzeichenen hinkt die Seite kein bisschen und ich wüßte auch gar nimmer welche Indexe ich noch setzen sollte.
Aber ich habe alle 10 Minuten einen Job der die DB ziehmlich beansprucht und ich weiß nicht mehr wie ich diesem Problem entgegentreten könnte.
Wir besitzen eine Web2 KFZ-Börse, welche zur Zeit grad mal an die 135.000 aktive PKW Inserate heranngekommen ist. Ich bekomme von den Händlern in Sammelftp-Ordnern die Inserate per ZIP-File.
Diese werden dann nach der Reihe abgearbeitet und in die Datenbank befördert. Entweder als INSERT wenn komplett neues KFZ eingetragen wurde, oder als UPDATE wenn sich nur Daten an einen bestehenden Inserat geändert haben. Somit bleibt auch die ID sehr lange gleich und ändert sich nicht dauernd, was auch bzg. Google schei.. wäre.
Das Abarbeiten der ZIP-Files soll in Kürze ein 2. Server machen, damit der Hauptserver davon verschont bleibt.
Es geht dann aber immer noch um die Inserts und Updates auf dem Hauptrechner.
Klar kann ich einen Insert mittles LOAD DATA machen, was sicher noch schneller ginge als der momentane Schritt über die Konsole:
Klar mache ich auch noch ein
und abschließend ein
Dazwischen sind die INSERT's und UPDATE's
Die SQL-Dateien welche dann eingespielt werden sind meistens so um die 5-9MB groß - es sind so zwischen 3.000 und 5.000 Datensätze die da eingefügt bzw. upgedatet werden.
Abschließend noch sei gesagt, dass ich beim INSERT nicht einzelne Inserts benutze sondern diese Variante
Ich glaub auch nicht, dass die Insertanweisungen das lamende Thema sind, sondern die UPDATE-Anweisungen, welche wesendlich mehr sind als die INSERT-Anweisungen.
Jedenfalls fährt mir mysql immer auf über 93% Prozessorleistung.
Das kanns ja wohl nicht sein? Oder doch?
Hat irgendwer von euch für mich Tipps oder Ratschläge, damit ich dieses Problem aus der Welt schaffen kann?
Benutzte Konfiguration:
PHP 5.1.4
MYSQL 4.1.10a-Max-log
lg.
Werner
sicher ein Tema welches schon oft diskutiert wurde. Es geht bei der INSERT und bei der UPDATE Anweisung um die Preformance.
Sicher sind meine Indexe und SQL-Statements nicht die besten. Da ließe sich sicher noch einiges herausholen. Aber ich sags mal so: Trotz der Zugriffe die wir verzeichenen hinkt die Seite kein bisschen und ich wüßte auch gar nimmer welche Indexe ich noch setzen sollte.
Aber ich habe alle 10 Minuten einen Job der die DB ziehmlich beansprucht und ich weiß nicht mehr wie ich diesem Problem entgegentreten könnte.
Wir besitzen eine Web2 KFZ-Börse, welche zur Zeit grad mal an die 135.000 aktive PKW Inserate heranngekommen ist. Ich bekomme von den Händlern in Sammelftp-Ordnern die Inserate per ZIP-File.
Diese werden dann nach der Reihe abgearbeitet und in die Datenbank befördert. Entweder als INSERT wenn komplett neues KFZ eingetragen wurde, oder als UPDATE wenn sich nur Daten an einen bestehenden Inserat geändert haben. Somit bleibt auch die ID sehr lange gleich und ändert sich nicht dauernd, was auch bzg. Google schei.. wäre.
Das Abarbeiten der ZIP-Files soll in Kürze ein 2. Server machen, damit der Hauptserver davon verschont bleibt.
Es geht dann aber immer noch um die Inserts und Updates auf dem Hauptrechner.
Klar kann ich einen Insert mittles LOAD DATA machen, was sicher noch schneller ginge als der momentane Schritt über die Konsole:
PHP-Code:
exec("mysql --user=xxx --pass=xxx --host=xxx database < file.sql, $ret);
PHP-Code:
/*!40000 ALTER TABLE `anzeigen` DISABLE KEYS */;
LOCK TABLES `anzeigen` WRITE;
PHP-Code:
UNLOCK TABLES;
/*!40000 ALTER TABLE `anzeigen` ENABLE KEYS */;
Die SQL-Dateien welche dann eingespielt werden sind meistens so um die 5-9MB groß - es sind so zwischen 3.000 und 5.000 Datensätze die da eingefügt bzw. upgedatet werden.
Abschließend noch sei gesagt, dass ich beim INSERT nicht einzelne Inserts benutze sondern diese Variante
PHP-Code:
INSERT INTO `anzeigen` VALUES ('blabla', 'blabla', blabla'),
('blabla', 'blabla', blabla'),
('blabla', 'blabla', blabla'),
...
Jedenfalls fährt mir mysql immer auf über 93% Prozessorleistung.
Das kanns ja wohl nicht sein? Oder doch?
Hat irgendwer von euch für mich Tipps oder Ratschläge, damit ich dieses Problem aus der Welt schaffen kann?
Benutzte Konfiguration:
PHP 5.1.4
MYSQL 4.1.10a-Max-log
lg.
Werner
Kommentar