Laden...

(My)Sql UPDATE queries - Performance

Erstellt von cook vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.638 Views
C
cook Themenstarter:in
193 Beiträge seit 2005
vor 16 Jahren
(My)Sql UPDATE queries - Performance

Moin,
ich hab grad ein kleines projekt am laufen und stehe vor einem Performance problem. Ich hab eine Table, ich tippe mal bis zu 1.000.000 Datensätze. Jetzt muss ich einen kleinen dienst programmieren der datensätze raus pickt und dann einen Wert Updated. Problem ist, dass das ganze sehr schnell gehen muss. Ich sag mal gewünschte zeit, die ich wohl kaum hinbekommen werde, wären 15000 Datensätze PRO SEKUNDE. Ich kenne keinen anderen weg als jedesmal für jeden datensatz zu sagen UPDATE bla Where 1=2. Kann man nicht irgendwie sowas wie eine Sammlung von updates auf einen schlag schicken?

Keine ahnung, ich denke ihr wisst was ich meine. Habt ihr da erfahrungen? Bin total überfordert....

Datenbanksystem: MySql

R
494 Beiträge seit 2006
vor 16 Jahren

Hast du denn mal versucht wie schnell es ist?
Wichtig sind Indizes.

So im allgemeinens sind 1mio einträge (kommt natürlich auf die größe je eintrag an) nicht so ungemein viel und sollte machbar sein in der Geschwindigkeit

K
50 Beiträge seit 2006
vor 16 Jahren

mhm also regen hat schon recht. indize sind extrem wichig.
wenn du viele commands ausfuehren willst waere ne transaction ganz gut. (weiss gar nicht obs die bei mysql gibt)

15.000 befehle / sek ist aber ganz schoen happig find ich. viel glueck! 🙂

3.971 Beiträge seit 2006
vor 16 Jahren

MySQL kann ab 4.haste nicht gesehen Transaktionen, allerdings nur bei InnoDB und BDB.

Soweit ich weiß, gibt es aber in MySQL nicht die Möglichkeit 100. von Datensätze gleichzeitig zu ändern. Das einzigste was ginge wäre


UPDATE tblBlaBla SET Col5 = Col5 + 1 WHERE 1;

Du müsstest also ansonsten 15.000 SQL-Statements absetzen. Sehe ich aber auch nicht so als schwierig. Problem könnte nur sein, dass du mehr Strings erstellst, als .NET parallel wieder freigeben kann. Musst du mal ausprobieren.

Ansonsten ist es wichtig aber auch deinen MySQL-Server entsprechend zu konfigurieren. Wenn du sehr viel schreibst, brauchst du unbedingt schnelle Festplatten, am besten in einem (einfachen) stripeset.

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

4.506 Beiträge seit 2004
vor 16 Jahren

Hallo zusammen,

mal davon abgesehen, dass MySQL für solche Datenmengen vielleicht doch nicht die richtige Datenbank ist, würde ich versuchen das Ganze in einer StoredProcedure laufen zu lassen.

So weit ich richtig informiert bin, kann MySQL ab der Version in der auch Transaktionen gehen auch StoredProcedures verarbeiten.

Darüberhinaus ist hier ein Index auf die Where-Spaltenbedingung bestimmt sinnvoll.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

F
10.010 Beiträge seit 2004
vor 16 Jahren

15.000 Datensätze / Sekunde sind auf normalen Rechnern für fast jede DB nicht zu schaffen.

Hier hilft nur ein Appserver, der das alles im Speicher erledigt.
Was meinst Du warum MS solche Serverfarmen hat:

http://blog.norberteder.com/index.php?entry=entry071114-142853

3.825 Beiträge seit 2006
vor 16 Jahren

Hallo Norman-Timo,

Grüße nach Darmstadt 😉

MySQL eignet sich sehr gut für Datenbanken mit grossen Datenmengen.

Transaktionen kennt MySQL nur mit dem InnoDB oder als Beta-Version mit der Falcon Engine.

Wenn es schnell gehen soll dann sollte man möglichst viel den Server arbeiten lassen. Also ein grosses SQL-Statement oder Stored Procedures.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

4.506 Beiträge seit 2004
vor 16 Jahren

Hallo BerndFfm,

naja ich möchte nicht schon wieder ein Glaubenskrieg für oder gegen MySQL vom Zaun brechen. Meist ist die Wahl der DB sowieso gefallen und ab dann fix (<- Meistens).

Fest steht aber folgendes, und das möchte ich wirklich unterstreichen, die Datenbank arbeitet am Schnellsten, wenn es die Aufbereitung der Daten selbst vornimmt. Also (gleiche Meinung):

Also ein grosses SQL-Statement oder Stored Procedures.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

3.825 Beiträge seit 2006
vor 16 Jahren

Norman-Timo : Mir ist die Datenbank egal. ich arbeite mit MS-SQL, SQL Compact MySQL und Oracle. Haben alle so ihre Vor- und Nachteile.

Hauptsache kein Access und kein ODBC 😉

Zum Thema :

Ich habe mal ein Update von 45.000 Datensätzen mit einem SQL-Befehl auf einem MS SQL-Server gemacht. Hat 0.5 bis 1.9 Sekunden gedauert.

Ich denke es hängt sehr von den Daten und von den SQL-Befehlen ab.

Wenn man optimiert könnte das klappen mit < 1 Sekunde.

Habs grad in MySQL (Windows-Server) probiert : 0.9 - 2.2 Sekunden bei 45.000 Datensätzen.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

C
cook Themenstarter:in
193 Beiträge seit 2005
vor 16 Jahren

Wie haste das update gemacht BerndFfm? Mein prob ist ja das ich wirklich jeden datensatz einzeln ändern muss. Also ich hab es mit einer schleife gemacht wo ichd ann 15000 Updates an den server gefeurt habe. Hat bei mir aber 2,6 Sekunden gedauert 😠

Was halt auch noch schlecht ist, dass ich den server ja mit dem ganze extrem belaste. So das andere abfragen evtl. träge werden. Ich glaub ich muss das alles nochmal überdenken 🙁

3.825 Beiträge seit 2006
vor 16 Jahren

Cook : Das war ein SQL-Befehl der alle Datensätze geändert hat, also der Best Case !

Ist ja sehr von den Anforderungen abhängig.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3