Hallo,
ok, blöde Überschrift, aber weiter im Text
Folgendes Problem:
Auf meinem Server muß jede 15 Minuten ein Statistikupdate ausgeführt werden (sonst wird gecached) und das ist eine recht komplizierte Mysql Abfrage mit Joins über 3 oder 4 Tabellen, und Abfrage von teilweise bis zu 20.000 Datensätzen.
Das Query dauert ca. 20 Sekunden zum Ausführen.
Das Problem an der Sache ist jetzt, mein Mysql Locked für den Zeitraum die 3 Tabellen, wodurch alle anderen Prozesse natürlich nicht mehr drauf zugreifen können. Das ist natürlich total beschissen, weil die Connection Queue bis auf 100 anläuft, und dann nix mehr geht (Too many Connections)
Gibt es da keine Möglichkeit ohne Lock zu arbeiten, dass heißt auf die Tabelle darf auch so zugegriffen werden? Wenn da jetzt zwischendurch mal ein paar Inserts drin sind, und die zahlen nicht 100% korrekt sind, ist das nicht so schlimm, nur halt darf nicht der ganze Server blockiert werden.
Einer ne Idee, oder ist das unmöglich?
Sonst muß ich anfangen, und das Query in viele kleine Subqueries zerlegen, und das macht das ganze noch viel langsamer, und aber es funktioniert dann wenigstens einigermaßen.
Christopher
ok, blöde Überschrift, aber weiter im Text
Folgendes Problem:
Auf meinem Server muß jede 15 Minuten ein Statistikupdate ausgeführt werden (sonst wird gecached) und das ist eine recht komplizierte Mysql Abfrage mit Joins über 3 oder 4 Tabellen, und Abfrage von teilweise bis zu 20.000 Datensätzen.
Das Query dauert ca. 20 Sekunden zum Ausführen.
Das Problem an der Sache ist jetzt, mein Mysql Locked für den Zeitraum die 3 Tabellen, wodurch alle anderen Prozesse natürlich nicht mehr drauf zugreifen können. Das ist natürlich total beschissen, weil die Connection Queue bis auf 100 anläuft, und dann nix mehr geht (Too many Connections)
Gibt es da keine Möglichkeit ohne Lock zu arbeiten, dass heißt auf die Tabelle darf auch so zugegriffen werden? Wenn da jetzt zwischendurch mal ein paar Inserts drin sind, und die zahlen nicht 100% korrekt sind, ist das nicht so schlimm, nur halt darf nicht der ganze Server blockiert werden.
Einer ne Idee, oder ist das unmöglich?
Sonst muß ich anfangen, und das Query in viele kleine Subqueries zerlegen, und das macht das ganze noch viel langsamer, und aber es funktioniert dann wenigstens einigermaßen.
Christopher
Kommentar