| Martin J |
Geschrieben am: Fr 25.04.2008, 18:20
|
![]() AyomRank 4 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 64 Mitglied seit: 25.05.2007 |
Hi,
ich habe eine recht datenbanklastige Anwendung, basierend auf der Perl-DBI und Mysql 5.1. Es werden sehr viele UPDATE Anweisungen produziert, die mittlerweile den Bottleneck der Anwendung darstellen. Das Ergebnis der UPDATE Anweisung ist nicht kritisch, es muss nicht sofort, sondern nur zeitnah aktualisiert werden und selbst wenn mal etwas verloren ginge, wäre es nicht schlimm. Meine Frage: Bei INSERT gibt es ja die Möglichkeit DELAYED anzugeben und nicht auf das Resultat zu warten. Bei UPDATE gibt es soetwas nicht. Hier sind ja ein paar SQL Spezialisten versammelt, vielleicht habt ihr einen Tipp, welcher Ansatz Sinn machen würde, bzw. wo man vielleicht sauf schon bestehende Klassen zurückgreifen kann:
Die Datenbank und die Indizes sind bereits alle optimal, auch der Server selbst ist grundsätzlich einigermassen passend konfiguriert. vg, martin |
![]() |
| Sven K |
#2 Geschrieben am: Fr 25.04.2008, 19:42 (+01:22)
|
|
AyomRank 4 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 134 Mitglied seit: 27.10.2006 |
stichwort low priority
-------------------- |
![]() |
| jAuer Jürgen Auer - freiberufl. Programmierer |
#3 Geschrieben am: Fr 25.04.2008, 19:44 (+00:02)
|
|
AyomRank 9 Gruppe: Experten Entwicklung Beiträge: 2156 Mitglied seit: 4.02.2006 |
Eigentlich sind das noch zu wenige Informationen, um das Problem brauchbar zu identifizieren.
Bsp.: - Das Update einer einzelnen Zeile kann zu lange dauern, weil Indices fehlen / falsch sind. - Bei der Ausführung einer Seite werden 20 Datensätze geholt und die zeilenweise aktualisiert - anstatt in einem Rutsch. - Die Ermittlung der neuen Werte ist aufwendig, blockiert, weil parallel schon wieder andere Updates laufen. - Der Server ist insgesamt unterdimensioniert, das Problem tritt nur eher zufällig bei den Update-Anweisungen auf. Technisch kann man bsp. die zu aktualisierenden Daten in eine neue Tabelle schreiben. Zusätzlich läuft irgendeine Dauerschleife, die diese Tabelle überwacht, die Updates vornimmt und die verarbeiteten Zeilen löscht. Dann wäre das völlig entkoppelt. Oder man schreibt die zu aktualisierenden Werte in eine zusätzliche Tabelle und macht das Update im folgenden Schritt. Damit sind Updatesperre und Select-Sperre zur Ermittlung der neuen Werte voneinander entkoppelt. Beim MS-SqlServer kann man 'Dirty Reads' zulassen. Damit müssen Abfragen, die Werte zurückgeben, nicht auf die Fertigstellung von Änderungen warten. Theoretisch können dann zwar ab und an fehlerhafte Werte zurückgegeben werden, aber das könnte (laut den Hinweisen) tolerierbar sein. -------------------- Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.
server-daten: Web-Datenbanken als Online - CRM - Lösung. Konzentrieren Sie sich auf Ihr Kerngeschäft - nutzen Sie eine schlanke, schnelle Online-Datenbank von verschiedenen Standorten. |
![]() |
| Martin J |
#4 Geschrieben am: Fr 25.04.2008, 21:19 (+01:34)
|
||||
![]() AyomRank 4 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 64 Mitglied seit: 25.05.2007 |
Ok, vielen Dank für die Tipps so weit. @Sven: da habe ich auch zuerst geschaut, aber in der MySQL Doku steht:
Hier stehts nochmal etwas expliziter: http://osdir.com/ml/db.mysql.general/2002-06/msg01049.html (wobei ich mich liebend gerne vom Gegenteil überzeugen liesse) @jAuer (Dein SQL Tutorial ist schön) Ein paar von den von Dir genannten Sachen kann ich ausschliessen: Indizes sind ok Ermittlung neuer Werte ok (werden mittels fetchall schon vorher in den Speicher gelesen) Server (Hardware als auch mysqld) ok Aus Deinen anderen Punkten werde ich jetzt erstmal die neue Tabelle und das Zusammenfassen der Updates aufgreifen. Ich werde mal testweise die Inserts in eine temporäre Tabelle im Speicher schreiben und dann periodisch als Updates auf einmal einspielen. Das dürfte deutlich einfacher sein, als den Dämon zu schreiben. Ich schreibe dann mal in einer Woche, ob es sich gelohnt hat. MsSql kenne ich leider nicht, da ich im Laufe der Jahre vieles auf Unix optimiert habe. Zumindest Stand 2006 war MySQL (>5.0) für meine Zwecke besser geeignet, als Postgres oder die kleine Oracle Version. |
||||
![]() |
| jAuer Jürgen Auer - freiberufl. Programmierer |
#5 Geschrieben am: Sa 26.04.2008, 09:52 (+12:33)
|
||||
|
AyomRank 9 Gruppe: Experten Entwicklung Beiträge: 2156 Mitglied seit: 4.02.2006 |
Ich hatte da eigentlich bloß an einen einfachen Cronjob gedacht. Nicht gleich ein eigener Dämon.
danke für das Lob. Und schön, wenn die Texte nützlich sind und Leser finden. -------------------- Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.
server-daten: Web-Datenbanken als Online - CRM - Lösung. Konzentrieren Sie sich auf Ihr Kerngeschäft - nutzen Sie eine schlanke, schnelle Online-Datenbank von verschiedenen Standorten. |
||||
![]() |
| manuel |
#6 Geschrieben am: Sa 26.04.2008, 12:15 (+02:23)
|
![]() AyomRank 5 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 261 Mitglied seit: 14.01.2004 |
http://phpperformance.de/verzoegertes-schr...ktes-schreiben/
passt doch perfekt zu deiner Frage das Thema. wie schon erwähnt kannst du bei Update die Priorität angeben, mit dennen diese abgearbeitet werden. |
![]() |
| mainlink Mainlink Internet |
#7 Geschrieben am: Sa 26.04.2008, 16:18 (+04:03)
|
|
AyomRank 5 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 207 Mitglied seit: 12.09.2007 |
Nebenbei bemerkt: Die gesamte Seite ist sehr lesenswert. Da schreibt jemand mit Ahnung von der Materie.
-------------------- Sichere (managed) Rootserver, Webspace und Mailaccounts unter FreeBSD: Mainlink Internet
|
![]() |
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
« aufträge und kunden zählen | Programmierung Allgemein | Externe Seite einbinden - JavaScript deaktivieren »
Trackback-Url: http://www.ayom.com/track/t/24179
![]() |
![]() ![]() ![]() |
| Themen Titel | Autor | Views | Antworten | Letzte Aktion |
| MySQL Abfrage von einer Tabelle | webdoktor | 276 | 18 | Fr 8.08.2008, 19:03 |
| MySQL Datenbankoptimierung | Coach | 124 | 4 | Do 7.08.2008, 05:47 |
| PR Update ? | PA | 594 | 20 | Di 5.08.2008, 17:15 |
| Suche kleinere Jobs (HTML, PHP, MySQL...) | Oliver Pester | 74 | 0 | Di 5.08.2008, 17:03 |
| (S) Programmierer PHP MySQL | Dachs | 62 | 0 | Mo 4.08.2008, 20:48 |
| MySQL Abfrage von zwei Tabellen | webdoktor | 117 | 6 | Do 31.07.2008, 15:26 |
| PR Update 07/2008 | Lila | 246 | 9 | Di 29.07.2008, 16:36 |
| MySQL Benutzernamen | Coach | 129 | 4 | Fr 25.07.2008, 21:53 |
| MYSQL - Benutzer koennen nicht.... | jerry70 | 117 | 3 | Di 15.07.2008, 15:55 |
| mysql too many connections | Tuemmel | 319 | 14 | Mo 30.06.2008, 17:28 |
Anzeige - [Interessiert an einer Anzeige?]

















