Seiten-Counter verbraucht zuviel Performance?
Seiten-Counter verbraucht zuviel Performance?
Ich hab bei mir neben einem besuchercounter auch noch einen Seiten-Counter in den PageHeader eingebaut. Praktisch bei jedem Seitaufruf wird dabei ein Datensatz in der Datenbank geupdatet.
Ich habe aber das Gefühl das dies zuviel Performance verbraucht, vermutlich wegen Locking in der Datenbank (nehme an da sgeht automatisch).
Wie kann man SeitenCounter mit wenige rPerformance-Verlust realisieren. Gibts da Tricks?
Gruß
Frank
Ich habe aber das Gefühl das dies zuviel Performance verbraucht, vermutlich wegen Locking in der Datenbank (nehme an da sgeht automatisch).
Wie kann man SeitenCounter mit wenige rPerformance-Verlust realisieren. Gibts da Tricks?
Gruß
Frank
Im Prinzip hängt es an der Art wie man den Seitencounter gecodet hat. Mehr Performance beringt vorallem auch, weniger SQL-Abfragen machen und soviel wie möglich zusammenfassen.
Haste mal versucht den Seitencounter mal mit TXT-Datein zu coden, anstatt auf MySQL basis???
Mfg
MrMind
Haste mal versucht den Seitencounter mal mit TXT-Datein zu coden, anstatt auf MySQL basis???
Mfg
MrMind
Selbst ist der Coder
Coder unter Linux
Coder unter Linux
- D@ve
- Ehemaliges Teammitglied
- Beiträge: 3842
- Registriert: 28.08.2002 19:33
- Wohnort: Bretzfeld
- Kontaktdaten:
Wieviel Millionen Benutzer hast Du denn am Tag? Damit man mit einem Query pro Aufruf Performanceprobleme bekommst muss man schon ziemlich viele User haben...
Poste mal den Teil Deines Counter Scriptes mit dem Query. Hast Du da vielleicht irgendwo ne Schleife eingbaut, die etwas länger läuft als Du glaubst?
Gruß, Dave
Poste mal den Teil Deines Counter Scriptes mit dem Query. Hast Du da vielleicht irgendwo ne Schleife eingbaut, die etwas länger läuft als Du glaubst?
Gruß, Dave
There are only 10 types of people in the world: Those who understand binary, and those who don't
Der Counter ist wie gesagt auf jeder generierten Seite, da er im PageHeader steckt. Der COde ist recht einfach:
Code: Alles auswählen
$sql = "UPDATE " . CONFIG_TABLE . "SET config_value = '" . ($test_counter + 1) . "' WHERE config_name = 'test_counter'";
[code]
Aber diese Anweisung wird halt sehr oft aufgerufen, ich hab ca. 300 Besucher am Tag die schätzungsweise zusammen 3000-5000 Seiten abrufen. Ich denke da kommt es auch mal vor das gerade gleichzeitig User die Zeite wechseln, vielleicht gibt es da ein Locking Problem?
Ich hab jedenfalls das Gefühl die Abfrage reduziert Performance. Habt ihr ne bessere Lösung?
Ich denke ne Textdatei ist noch schlechter, vor allem wegen dem Locking.
Der Counter ist wie gesagt auf jeder generierten Seite, da er im PageHeader steckt. Der COde ist recht einfach:
Code: Alles auswählen
$sql = "UPDATE " . CONFIG_TABLE . "SET config_value = '" . ($test_counter + 1) . "' WHERE config_name = 'test_counter'";
[code]
Aber diese Anweisung wird halt sehr oft aufgerufen, ich hab ca. 300 Besucher am Tag die schätzungsweise zusammen 3000-5000 Seiten abrufen. Ich denke da kommt es auch mal vor das gerade gleichzeitig User die Zeite wechseln, vielleicht gibt es da ein Locking Problem?
Ich hab jedenfalls das Gefühl die Abfrage reduziert Performance. Habt ihr ne bessere Lösung?
Ich denke ne Textdatei ist noch schlechter, vor allem wegen dem Locking.
- D@ve
- Ehemaliges Teammitglied
- Beiträge: 3842
- Registriert: 28.08.2002 19:33
- Wohnort: Bretzfeld
- Kontaktdaten:
Anonymous hat geschrieben:Der Counter ist wie gesagt auf jeder generierten Seite, da er im PageHeader steckt. Der COde ist recht einfach:
Code: Alles auswählen
$sql = "UPDATE " . CONFIG_TABLE . "SET config_value = '" . ($test_counter + 1) . "' WHERE config_name = 'test_counter'"; [code] Aber diese Anweisung wird halt sehr oft aufgerufen, ich hab ca. 300 Besucher am Tag die schätzungsweise zusammen 3000-5000 Seiten abrufen. Ich denke da kommt es auch mal vor das gerade gleichzeitig User die Zeite wechseln, vielleicht gibt es da ein Locking Problem? Ich hab jedenfalls das Gefühl die Abfrage reduziert Performance. Habt ihr ne bessere Lösung? Ich denke ne Textdatei ist noch schlechter, vor allem wegen dem Locking.[/quote] 300 User sind noch nicht wirklich viel... Ich hab ähnlichen Traffic auf meine Seite und in meinem (selbstgebastelten) Counter-Script (auch auf jeder Artikelseite im CMS) sind 4 Queries... Läuft php bei Deinem Server eventuel als CGI? Gruß, Dave
There are only 10 types of people in the world: Those who understand binary, and those who don't
Scheinbar liest du den Wert zuerst aus der Datenbank, veränderst ihn dann in PHP und schreibst ihn wieder in die Datenbank. Besser ist da
Ausserdem bringt dein Vorgehen folgendes Problem:
Code: Alles auswählen
UPDATE tabelle SET feld=feld+1 WHERE foo=bar
- Prozess A liest den Wert aus: 5
- Prozess A erhöht um 1: 6
- Prozess B liest den Wert aus: 5
- Prozess A schreibt in Datenbank: 6
- Prozess B erhöht um 1: 6
- Prozess B schreibt in Datenbank: 6
Na ich lese es nicht direkt nochmal aus und erhöhe es dann, sondern es wird eh vorher im Script irgendwo ausgelesen. Da steht vorher der Befehl:
$visit_counter = $board_config['test_counter'];
Meint ihr das bringt was wenn ich das weglasse und statt dessen nur
UPDATE tabelle SET feld=feld+1 WHERE foo=bar
nehme.
Dumme Frage: Was bdeutet " foo=bar". Das muß doch so heißen:
UPDATE tabelle SET feld=feld+1 WHERE config_name = 'test_counter'";
Oder?
$visit_counter = $board_config['test_counter'];
Meint ihr das bringt was wenn ich das weglasse und statt dessen nur
UPDATE tabelle SET feld=feld+1 WHERE foo=bar
nehme.
Dumme Frage: Was bdeutet " foo=bar". Das muß doch so heißen:
UPDATE tabelle SET feld=feld+1 WHERE config_name = 'test_counter'";
Oder?
Nachtragen:
Und wenn ich nu die Abfrage :
UPDATE tabelle SET feld=feld+1 WHERE config_name = 'test_counter'";
zum aktuallisieren nehme, dann brauch ich ja imme rnoch ne Abfrage um den Wert rauszulesen. Ich muß ihn ja schließlich auch anzeigen. Damit dürfte es nicht viel Performance bringen, oder? Nur halt genauer zählen!
Und wenn ich nu die Abfrage :
UPDATE tabelle SET feld=feld+1 WHERE config_name = 'test_counter'";
zum aktuallisieren nehme, dann brauch ich ja imme rnoch ne Abfrage um den Wert rauszulesen. Ich muß ihn ja schließlich auch anzeigen. Damit dürfte es nicht viel Performance bringen, oder? Nur halt genauer zählen!