![]() |
| | Themen-Optionen |
| | Nach oben #1 |
| Neuer Benutzer Registriert seit: 19.06.2006
Beiträge: 14
|
Hallo, ich habe folgendes problem... ich betreibe eine selbstprogrammierte community, auf dieser erhält jeder angemeldete user ein eigenes userprofil und dazu ein gästebuch welches zur communitkation mit anderen usern dient... seit einiger zeit tritt es auf, das man sehr lange warten muss bis das gästebuch mit den dazugehörigen einträgen geladen ist... erklären kann ich es mir nur dadurch, da in der datenbank extrem viele einträge gespeichert sind... es sind insgesamt 774.673 stück... zahl täglich steigend... die einträge werden wie folgt gespeicher... ID name desjenigen der sich einträgt name desjenigen an wen der eintrag gerichtet ist der eintrag selbst und so werden sie auch ausgelesen... durch die url dann einfach book.php?username=name demnach werden dann alle einträge ausgelesen wo der inhalt im feld "an" mit dem namen ausgelesen wird, der in der url steht... ich denke das ist bis hier hin verständlich... außerdem werden die einträge in seiten unterteilt da ja sonst die seite ewig lang wäre, einige haben über 10000 einträge in ihrem gästebuch... pro seite werden 20 einträge angezeigt... nunja, scheinbar ist dieses system einfach schlecht durchdacht oder es liegt an etwas anderem... und das ist die frage an euch... wodurch können hier diese extremen performanceprobleme auftreteten? liegt es an einem vllt. zu schlechten server? derzeit 256 MB RAM... ich wechsle auch auf einen server mit nun 1GB DDR2 RAM... aber auch da kann ja dann bald das problem auftreten wenn noch mehr einträge in der datenbank sind? ich hoffe ihr könnt mir helfen... wenn ihr der meinung seit, dass vllt. einfach nur das script ziemlich schlecht programmiert sein könnte, wäre ich auch bereit dieses zu posten... außerdem treten noch größere probleme auf wenn mehr user eingeloggt sind.. demnach werden viel öfter einträge ausgelesen und gespeichert... außerdem wir die book.php dann natürlich dementsprechend auch sehr oft abgerufen... ich hoffe ihr könnt mir weiterhelfen... ich danke euch schonmal... |
| | |
| | Nach oben #2 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
|
Hallo und willkommen im Forum. Generell wäre es natürlich für dich mal interessant einige Benchmarks durchzuführen und zu schauen, wo die Zeit liegen bleibt. Wie viele User greifen denn so im Schnitt gleichzeitig auf das Skript zu? Zeig doch mal die relevanten Stellen (da wo die Zeit liegen bleibt!) hier. Nutze dazu eventuell: Grüße, Ben. |
| | |
| | Nach oben #4 | |
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
| Zitat:
__________________ http://www.ChrisDiary.De | |
| | |
| | Nach oben #6 |
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
|
Die Relevanten Zeilen aus deinem PHPCode brauchen wir (mit den MySQLQueries und so) .. Vielleicht lässt sich daraus was schließen ..
__________________ http://www.ChrisDiary.De |
| | |
| | Nach oben #7 |
| Neuer Benutzer Registriert seit: 19.06.2006
Beiträge: 14
|
Vorab, wirklich ein tolles Forum hier, hier bekommt man sofort Hilfe von hilfsbereiten Leuten... Toll ... PHP-Code: Geändert von Ben (20.06.2006 um 00:55 Uhr). |
| | |
| | Nach oben #8 |
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
|
Was ich gleich seh, ist SELECT *. Das ist unnötig. Warum? Das könnte vielleicht sogar deiner Performance helfen. Ansonsten - indexes in den mySQLDatenbanken richtig gesetzt?
__________________ http://www.ChrisDiary.De |
| | |
| | Nach oben #9 |
| Neuer Benutzer Registriert seit: 19.06.2006
Beiträge: 14
|
Also ein "SELECT `feldA`, `feldB` FROM ..." wäre in dem falle dann angebrachter? Okay werde ich sofort abändern... Das mit diesen indexes wurde mir bereits gesagt, leider kann ich damit nicht wirklich etwas anfangen, was ist damit gemeint?... Wenn ich folgendes ausgeben lasse: EXPLAIN SELECT * FROM `gbeintraege` Bekomme ich diese Informationen die mich aber leider nicht wirklich weiterbringen... |
| | |
| | Nach oben #10 |
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
|
__________________ http://www.ChrisDiary.De |
| | |
| | Nach oben #12 |
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
|
Dann eben hier Les dich doch auch mal ein bisschen selbre durch, du findest genug..
__________________ http://www.ChrisDiary.De |
| | |
| | Nach oben #13 |
| Benjamin Steininger Registriert seit: 02.06.2005 Ort: weiher im tiefsten Odenwald
Beiträge: 1.180
|
wenn du von einem eigenen server redest, lass dir doch mal anzeigen wie stark der speicher beansprucht ist bei 30 usern oder mehr, was belegt den speicher ? mysql oder der webserver ? ... dazu der punkt, dass sowas: PHP-Code: Code: select num(*) from table und ein ordner in der anfrage ist ja auch total egal mfg robo47 |
| | |
| | Nach oben #14 |
| Neuer Benutzer Registriert seit: 19.06.2006
Beiträge: 14
|
Das kann ich dir derzeit noch nicht sagen, da ich NOCH über einen ManagedServer verfüge und dort einfach nur FTP zugang habe, also kann ich in dem falle einfach nicht mehr auslesen... bald habe ich dann den deticated server mit SSH zugang und alle dem... dort werde ich sicher dann diese informationen über die linux-konsole auslesen können...
|
| | |
| | Nach oben #15 |
| Neuer Benutzer Registriert seit: 19.06.2006
Beiträge: 14
|
So vielen Dank nochmal, ich habe die SELECT's nun angepasst... Ob's wirklich schneller ist? Naja ich denke eher nicht... Das lädt immernoch nen ganzes Weilchen... Aber ich werd mir das noch mit den indexes anschauen...
|
| | |
| | Nach oben #16 | ||
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
|
@Chr!s: Zitat:
Zitat:
Grüße, Ben. | ||
| | |
| | Nach oben #17 |
| Neuer Benutzer Registriert seit: 19.06.2006
Beiträge: 14
|
..ähäm ja richtig, ich habe sowieso alle felder ausgelesen... aber in dem link den ich da sah stand, das man auch wenn man alles ausließt besser kein SELECT * FROM nehmen sollte... allerdings bin ich, was indexe betrifft immernoch kein stück schlauer was die anwendung dieser betrifft... wofür sie gut sind und was für vorteile sie haben weiß ich bereits... allerdings weiß ich zum anderen nichteinmal, welche indexe ich nutzen sollte... im übrigen hatten sogut wie alle felder den typ TEXT... habe ich inzwischen auch umgeändert in VARCHAR(100) teilweise... usw... aber das brachte mir auch nicht den gewünschen effekt... immernoch lädt das gästebuch total langsam wobei jedoch der rest der page echt verdammt schnell lädt... scheinbar liegt es wohl in dem sinne dann daran, dass die tabelle für die gästebucheinträge so groß ist und so verdammt viel daten beinhaltet... aber es muss doch irgend eine möglichkeit geben das ganze schneller zu gestalten... nur fehlen mir dort leider die erforderlichen kenntnisse... wie gesagt... die community basiert auf teilweise php grundwissen... ich habe mit meiner eigenen community auch php gelernt... wobei ich nun heute weiß, dass es in dem sinne ein fehler war... es funktioniert zwar alles aber ist wohl sehr serverlastig... ich habe auch ein server monitoring bei meinem derzeitigen hoster... dort findet man ein diagram welches die auslastung des server anzeigt... geschrieben steht dort "Der Wert 1 stellt eine 100%ige Auslastung des Servers dar. Sollte sich der Wert permanent über 1 bewegen, sollten sie auf einen "größeren" Server wechseln" Nunja, der Wert liegt dabei teilweise bei 10 und höher (wenn wirklich viele User eingeloggt sind ... [~ 40 - 50] - Wenn ich den Text wörtlich nehme der dort steht, hat mein Server ja in dem Sinne dann eine Auslastung von 1000% was doch eigentlich gar nicht möglich ist, da 100% sowieso schon eine maximale Auslastung darstellen würde... |
| | |
| | Nach oben #18 | |
| me pro ok? Registriert seit: 07.09.2005 Ort: Pulheim bei Köln
Beiträge: 964
| Zitat:
Aber nun zu deiner eigentlichen Frage mit den Indizes (ein Idex, zwei Indizes Indizes sagen der Datenbank, dass auf dem Feld, auf dem der Index liegt, häufig Abfragen durchgeführt werden. Hast du zum Beispiel eine Suchfunktion, die folgenden Query benutzt, sql Code:
Da in deinem Skript alle Abfragen über "name desjenigen an wen der eintrag gerichtet ist" laufen, ist es, angesichts der großen Anzahl Datensätze, fast schon Pflicht, einen Index auf die Spalte zu legen
__________________ Gedanken aus Draht stricken einen Zaun. Geändert von Lars (20.06.2006 um 02:02 Uhr). | |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Entwurfsproblem: Aus Widgets in Datenbank schreiben? | Basti | PHP-Programmierung | 3 | 29.03.2007 13:13 |
| Problem bei Verarbeitung von Templates (Eigene Klassen) | dago | PHP-Programmierung | 21 | 31.08.2006 16:02 |
| welche Datenbank - Datentyp für Dateien | risa | Datenbanken | 5 | 01.12.2005 15:17 |
| Datenbank und Sicherheit | sparrow | Datenbanken | 23 | 05.11.2005 17:45 |
| Datenbank Verwaltung | taskin73 | Datenbanken | 7 | 30.07.2005 17:07 |