Inserts beschleunigen?
am 06.07.2006 01:51:58 von stefan.glaesser
Hallo NG,
ich habe hier eine Tabelle (MyIsam) mit ca. 800 MB Daten und 900 MB
Fulltext-Indizes. In der Tabelle sind ca. 2 Mio Datensätze. Jetzt
besteht das Problem, dass täglich Updates & Inserts an der Tabelle
ausgeführt werden müssen. Parallel dazu müssen aber Suchabfragen an die
Tabelle abgesetzt werden können.
Im Moment zB. läuft gerade ein Insert mit ca. 40.000 neuen Datensätzen.
Pro Minute schafft die Datenbank aber gerade mal ca. 600-800 Datensätze
(unter anderem abhängig von der derzeitigen "Leselast"). Kann man das
vielleicht mit Boardmitteln noch irgendwie beschleunigen? Was vermutlich
dauert ist das zeitgleiche Aktualisieren der Indizes. Ein "INSERT
DELAYED ..." hat nicht wirklich etwas genützt. Der Rechner ist ein
Athlon64 3800+ mit 2GB RAM und Hardware-Raid1.
Gruß,
Stefan
Re: Inserts beschleunigen?
am 06.07.2006 07:42:03 von Andreas Kretschmer
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Re: Inserts beschleunigen?
am 06.07.2006 10:05:50 von stefan.glaesser
Hallo Andreas,
> - deine Inserts in eine eigenständige Transaktion kapseln,
Wo bringt denn sowas Performance?
> - Indexe dabei vorher löschen und dann wieder aufbauen
Dauert auch sehr lange, hab ich schonmal probiert.
> - statt Insert lieber Copy benutzen, geht schneller
Kennt das denn MySQL? In der Doku find ich nix über "Copy".
> Das wären wohl so die Lösungen, die man bei einer transaktionsfähigen
> Datenbank machen könnte. Du könntest vielleicht auch einiges gewinnen,
> die einzufügenden Datensätze erst einmal in eine separate Tabelle zu
> werfen und dann diese in einem Rutsch an die Zieltabelle anzuhängen.
Ich hab mir jetzt eine Lösung mit der separaten Tabelle gebastelt.
Funktioniert auch erstmal ganz wunderbar. Hab damit 17000 neue
Datensätze binnen 2min eingefügt.
Gruß,
Stefan
Re: Inserts beschleunigen?
am 06.07.2006 10:41:02 von Andreas Kretschmer
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Re: Inserts beschleunigen?
am 06.07.2006 10:56:39 von Harald Fuchs
In article <44acc45f$0$26261$9b4e6d93@newsread2.arcor-online.net>,
=3D?ISO-8859-15?Q?Stefan_Gl=3DE4=3DDFer?=3D writes=
:
>> - statt Insert lieber Copy benutzen, geht schneller
> Kennt das denn MySQL? In der Doku find ich nix über "Copy".
Andreas ist mal wieder auf dem PostgreSQL-Trip. Auf MySQL heißt das
"load data infile".
Re: Inserts beschleunigen?
am 06.07.2006 11:01:48 von Andreas Kretschmer
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Re: Inserts beschleunigen?
am 06.07.2006 11:10:11 von Axel Schwenke
Stefan Gläßer wrote:
>
> ich habe hier eine Tabelle (MyIsam) mit ca. 800 MB Daten und 900 MB
> Fulltext-Indizes. In der Tabelle sind ca. 2 Mio Datensätze. Jetzt
> besteht das Problem, dass täglich Updates & Inserts an der Tabelle
> ausgeführt werden müssen. Parallel dazu müssen aber Suchabfragen an die
> Tabelle abgesetzt werden können.
>
> Im Moment zB. läuft gerade ein Insert mit ca. 40.000 neuen Datensätzen.
Also Bulk-Inserts. Schau mal ins Manual unter "Speed of INSERT
statements". Volltext-Indizes machen INSERTs verdammt teuer.
UPDATEs und DELETEs übrigens auch.
> Pro Minute schafft die Datenbank aber gerade mal ca. 600-800 Datensätze
> (unter anderem abhängig von der derzeitigen "Leselast"). Kann man das
> vielleicht mit Boardmitteln noch irgendwie beschleunigen?
Warum? Deine 40.000 Rows brauchen ca. 1 Stunde. Dann ist das halt so.
> Was vermutlich dauert ist das zeitgleiche Aktualisieren der Indizes.
Jepp. Index-Aktualisierung abschalten. Manual lesen.
> Ein "INSERT
> DELAYED ..." hat nicht wirklich etwas genützt. Der Rechner ist ein
> Athlon64 3800+ mit 2GB RAM und Hardware-Raid1.
Mehr RAM! Deine Indizes müssen ins RAM passen, sonst wird das
schnarchlangsam. Wie groß ist der key_buffer eingestellt?
XL
Re: Inserts beschleunigen?
am 06.07.2006 13:51:14 von thborsdorf
Andreas Kretschmer schrieb am 06.07.2006 07:42:
> ich habe hier eine Tabelle (MyIsam) mit ca. 800 MB Daten und 900 MB
>> - deine Inserts in eine eigenständige Transaktion kapseln,
Verzeiht mir wenn ich mich täusche - aber ist es nicht so daß MyISAM gar
keine Transaktionen unterstützt? Jedenfalls hab ich das mal gelesen und
bei mir nachvollziehen können, daraufhin hab ich dann meine Tabellen auf
InnoDB umstellen dürfen.
> - Indexe dabei vorher löschen und dann wieder aufbauen
Das sollte man dann aber erst nach Feierabend tun, weil eine
Volltext-Suche ohne Indizes nicht viel Spaß macht...
> Andreas
MfG Thomas.
Re: Inserts beschleunigen?
am 06.07.2006 13:58:10 von Andreas Kretschmer
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Re: Inserts beschleunigen?
am 07.07.2006 13:29:49 von Richard Lechner
Andreas Kretschmer writes:
> Falls MySQL hier nicht mithalten kann, sorry.
Andreas du bist schon soooooo lange im Usenet unterwegs aber die
jeweils _richtige_ Gruppe kannst du noch immer nicht finden?
Was soll es bringen auf Fragen zu MySQL mit Lösungen zu Postgres
zu antworten? Möchtest du _unbedingt_ hier der Gruppenkasperl werden?
Re: Inserts beschleunigen?
am 07.07.2006 14:33:33 von Andreas Kretschmer
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de