MyISAM - Update vieler Datensätze - Optimierung

racketloose

Neuer Benutzer
Beiträge
3
Hallo Zusammen,

ich bin dabei ein Programm zu schreiben welches jede menge Daten aktualisieren muß.
dazu verwende ich eine MySQL DB mit myisam tabellen
die Updates werden in größeren blöcken zu 500 befehlen an die DB übergeben. also nicht jeder einzeln sondern 500 in einem rutsch.
mit paar updates der art funktioniert das sehr gut.
wenn ich aber die Live-Daten nutze klemmt es vorn und hinten...

kurz paar daten:

die Tabelle die die updates bekommt hat ca 10 millionen einträge.
die updates gehen immer mit where über die primary id.
updates kommen pro min ca 200 500erter packete rein.

hat einer paar tipps wie ich die DB tunen kann?
also vorallem was die config der my.cnf angeht?
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.523
Hallo Zusammen,

ich bin dabei ein Programm zu schreiben welches jede menge Daten aktualisieren muß.
dazu verwende ich eine MySQL DB mit myisam tabellen
die Updates werden in größeren blöcken zu 500 befehlen an die DB übergeben. also nicht jeder einzeln sondern 500 in einem rutsch.
mit paar updates der art funktioniert das sehr gut.
wenn ich aber die Live-Daten nutze klemmt es vorn und hinten...

kurz paar daten:

die Tabelle die die updates bekommt hat ca 10 millionen einträge.
die updates gehen immer mit where über die primary id.
updates kommen pro min ca 200 500erter packete rein.

hat einer paar tipps wie ich die DB tunen kann?
also vorallem was die config der my.cnf angeht?

Viele Tipps, ja.

  • bitte nicht gleichlautende Fragen in verschiedene Foren stellen. Ob nun als racketloose hier oder als kinderesolute in http://www.php.de/datenbanken/111188-myisam-update-vieler-datensaetze-optimierung.html ist egal, es ist schlicht unhöflich
  • lerne bitte, Deine Fragen dort zu stellen, wo sie hingehören. Fragen nach MySQL / MyISAM in einem M$SQL-Forum zustellen ist einfach nur FAIL
  • MyISAM ist quasi radioaktiver Sondermüll des letzen Jahrtausends, den keiner freiwillig will. Entsorg das also.
  • schön, daß es vorn, hinten und seitlich klemmt, aber das ist keine Fehlerbeschreibung, mit der man was anfangen kann
  • steig um auf blackhole-Engine, die speichert *richtig* schnell


    Andreas
 
Zuletzt bearbeitet von einem Moderator:

Walter

Administrator
Teammitglied
Beiträge
443

racketloose

Neuer Benutzer
Beiträge
3
Das problem ist, das pro minute 200 mal 500 updates an die Tabelle gehen.
und die fangen ansich zu stapeln und werden irgendwann immer langsammer.
die updates müssen schneller werden.

wie kann ich ich die config der DB dafür anpassen?
weilin dewr tabelle selber kann ich nix mehr optimieren und die daten sind alle unique
 

ukulele

Datenbank-Guru
Beiträge
4.644
  • Wiso gibst du 200 mal 500 Updates an die DB und nicht 1 mal 100.000? Wiso sollte ersteres schneller sein als letzteres?
  • Hast du einen Index auf dem Primary Key?
  • Was hat der Server für Hardware und was darf MySQL davon benutzen?
 

BerndB

Datenbank-Guru
Beiträge
313
Moin Moin,

nur eine kurze Anmerkung.

Bei MyISAM gibt es nur einen TableLock. Das heist das bei einer Scchreiboperation IMMER die
komplette Tabelle gesperrt ist, auch zum lesen.

Am besten erst mal auf eine vernünftige Engine umstellen InnoDB z.B. da gibts einen Record Lock der
immer nur die betroffenen Zeilen lockt.

Gruss

Bernd
 

racketloose

Neuer Benutzer
Beiträge
3
Moin Moin,

nur eine kurze Anmerkung.

Bei MyISAM gibt es nur einen TableLock. Das heist das bei einer Scchreiboperation IMMER die
komplette Tabelle gesperrt ist, auch zum lesen.

Am besten erst mal auf eine vernünftige Engine umstellen InnoDB z.B. da gibts einen Record Lock der
immer nur die betroffenen Zeilen lockt.

Gruss

Bernd
Ich hatte vorher schon innodb, und dachte wegen der performance steige ich auf myisam um.
Ich werde dennoch mal testen, ob dies was bringt.

Ich werde berichten.
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.523
Ich hatte vorher schon innodb, und dachte wegen der performance steige ich auf myisam um.
Ich werde dennoch mal testen, ob dies was bringt.

Ich werde berichten.

MyISAM will eigentlich kein denkender Mensch mehr. Wenn Dir InnoDB zu lahm ist dann wirst halt in die Hardware investieren müssen, insbesondere Platte. SSD's sind ja heutzutage erschwinglich. Dann schauen, was da so an Indexen oder Constraints oder Triggern noch involviert ist. Unter PG würde ich raten, Daten, Indexe und Transaktionslog auf jeweils unterschiedliche Spindeln zu legen.
 
Oben