Problem: wird NOW() gecashed? (MySQL4 + Apache2)
Posted: 2004-12-02 20:53
Eine Frage an MySQL-Profis:
kann das sein dass die Werte der Funktion NOW() nicht immer aktuell sind? Also eventuell gecashed werden?
Ich habe gestern die Konfiguration des Apache bei meinem Server per suseconfig auf ENTERPRISE geändert (damit steigt die Anzahl der gleichzeitig laufenden APACHE-Prozesse) und seitdem habe ich das Problem, dass meine Skripte falsche Ergebnisse liefern.
Ich betreibe einen Besuchertausch, und speichere als Fakeschutz die Zeit des letzten Aufrufes des Hauptskriptes in der Datenbank. Das Skript wird von dem User jede 15 Sekunden aufgerufen. Wenn aber die Aufrufe näher aneinander liegen (also z.B. jede 5s kann man vermuten, dass der User das System umgehen will)
Deshalb folgende Abfrage:
SELECT ... Letzter_Besuch < date_sub(NOW(), interval 12 second) .... FROM ...
Seit gestern liefert die Abfrage bei ca. 80% der User NO. Und es kann ja nicht sein, dass 80% der User Faker sind :roll:
Bei einem erfolgreichen Aufruf wird dann der Letzter_Besuch auf aktuelle Zeit gesetzt:
UPDATE .... Letzter_Besuch=NOW() ...
Ich vermute jetzt, dass die NOW() bei einer hohen ANzahl an Apache-Prozessen verfälschte Werte liefert. Nur leider kann ich nicht sagen warum und ob es wirklich so ist. Vielleicht weiß einer von euch eine Antwort?
kann das sein dass die Werte der Funktion NOW() nicht immer aktuell sind? Also eventuell gecashed werden?
Ich habe gestern die Konfiguration des Apache bei meinem Server per suseconfig auf ENTERPRISE geändert (damit steigt die Anzahl der gleichzeitig laufenden APACHE-Prozesse) und seitdem habe ich das Problem, dass meine Skripte falsche Ergebnisse liefern.
Ich betreibe einen Besuchertausch, und speichere als Fakeschutz die Zeit des letzten Aufrufes des Hauptskriptes in der Datenbank. Das Skript wird von dem User jede 15 Sekunden aufgerufen. Wenn aber die Aufrufe näher aneinander liegen (also z.B. jede 5s kann man vermuten, dass der User das System umgehen will)
Deshalb folgende Abfrage:
SELECT ... Letzter_Besuch < date_sub(NOW(), interval 12 second) .... FROM ...
Seit gestern liefert die Abfrage bei ca. 80% der User NO. Und es kann ja nicht sein, dass 80% der User Faker sind :roll:
Bei einem erfolgreichen Aufruf wird dann der Letzter_Besuch auf aktuelle Zeit gesetzt:
UPDATE .... Letzter_Besuch=NOW() ...
Ich vermute jetzt, dass die NOW() bei einer hohen ANzahl an Apache-Prozessen verfälschte Werte liefert. Nur leider kann ich nicht sagen warum und ob es wirklich so ist. Vielleicht weiß einer von euch eine Antwort?