hilfdirselbst.ch
Facebook Twitter gamper-media
Ollli
Beiträge: 458
24. Jul 2002, 18:03
Beitrag #1 von 14
Bewertung:
(2202 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Perfomrance von MySQL und PHP


Hi Ihr

Also ich bin gerade beim basteln einer Membersite, mit ein paar MySQL-Abfragen und Ausgabe über PHP, das klassische System eben

Mein Problem ist folgendes:
Ich habe als Server einen Linux Suse 7.0 mit php 4.0.0 und mysql 3.22.32, 32 MB RAM, 100 MHz.

Auf der Seite habe ich standard-mäßig 3 Abfragen zur User-Erkennung und Authorisierung mit einmal 20 Rückgabeverten, zweimal 2 Rückgabewerte. Zusätzlich habe ich 3 Updates mit je 2 Werten.
Wenn ich jetzt Seiten aufrufe, die ich noch nicht fertig habe und nur die Erkennung, Authorisierung und Navigation beinhalten, dann dauert das übers Netzwerk rund 0.5 Sekunden.

Jetzt habe ich eine Seite, wo ich noch 3 weitere Abfragen habe und immer mind. 1 Update.

Update/Abfrage | Zeilen | Werte | Zeilen in DB | Werte pro Zeile
Abfrage 1 1 30 mind. 5 30
Abfrage 2 0 - 100 7 mind. 4800 30
Abfrage 3 5 2 5 3
Update 1 1 8 mind. 5 30
Update 2 1 14 mind. 5 30
Update 3 1 1 mind. 4800 30
Update 4 1 3 mind. 5 30


Bei dieser SEite dauert der Aufbau bi szu 5 sekunden und das übers Netzwerk.

Nun meine Frage, ist das normal so oder kann es sein, dass ich keinen "optimierten" code in PHP oder bei den Mysql-Queries habe?

Ich habe es nochmal Online getestet und da habe ich für eine unfertige Seite 2 sekunden gebraucht und für diese "Hammer-Seite" 4 Sekunden, aber ich denke das liegt am Modem oder?

Danke schon mal im Voraus!
Ollli

[ Diese Nachricht wurde geändert von: Ollli am 2002-07-24 18:12 ] Top
 
X
webgrauen
Beiträge: 20
24. Jul 2002, 20:52
Beitrag #2 von 14
Beitrag ID: #8010
Bewertung:
(2202 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Perfomrance von MySQL und PHP


Bei 4 updates kann es schon mal zum Stau kommen.

Den Speicher von unnötigen Ballast befreien:
mysql_free_result($deine_query_result);
Das hat bei meinem Forum wunder gewirkt.

Vieleicht sind auch ein paar Überhänge in deiner Tabelle, dann kannst du "optimize table" verwenden.

http://www.mysql.de/documentation/mysql/bychapter/manual.de_MySQL_Database_Administration.html#IDX560

als Antwort auf: [#8005] Top
 
Ollli
Beiträge: 458
24. Jul 2002, 21:39
Beitrag #3 von 14
Beitrag ID: #8013
Bewertung:
(2202 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Perfomrance von MySQL und PHP


Zitat:
webgrauen schrieb am 2002-07-24 20:52 :
Bei 4 updates kann es schon mal zum Stau kommen.

Den Speicher von unnötigen Ballast befreien:
mysql_free_result($deine_query_result);
Das hat bei meinem Forum wunder gewirkt.
Ist vielleicht nicht ganz ersichtlich geworden aus meinem posting *G*
es gibt eigentlich nur 2 regelmäßige Updates durch die Authentifizierung und eins, bzw. max. 2 für die weitere Seite.

Aber das mit mysql_free_result werde ich mal probieren und dann mal mein Ergebnis posten. Sollte ich das bei allen results machen oder nur bie bestimmten? In der doc steht man sollte es eigentlich nur bei großen machen.
BTW: Was wird als groß bei einer Abfrage bzw. bei einer Datenbank bezeichnet oder aufgefasst?

Ollli
als Antwort auf: [#8005] Top
 
oesi50  A  S
Beiträge: 2315
24. Jul 2002, 22:58
Beitrag #4 von 14
Beitrag ID: #8017
Bewertung:
(2202 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Perfomrance von MySQL und PHP


Hi Ol3i,

Eine Datenbank kann man als mittelgroß bezeichnen, wenn mind. 100.000 Datensätze drinstehen.
Zu Deinem Problem, die Performance hängt stark von der verwendeten Tabellenstruktur und den verw. SQL-Anweisungen ab(z.B. ...FROM t1,t2 WHERE t1.id=t2.id... ist langsamer als ein ...FROM t1 JOIN t2 ON t1.id=t2.id...). Es bringt manchmal auch was, bei mehrfachen Abfragen temporäre Zwischentabellen im RAM zu erzeugen, die man dann mehrfach als Bedingung verwenden kann. Manchmal ist es auch besser die UPDATEs erst einmal mit INSERT DELAYED in einer Zwischentabelle zu sammeln und dann in einem Rutsch zu machen. Im übrigen kann ich Dir mindestens 20 Möglichkeiten nennen, die die Performance beeinflussen. Wenn ich nicht weiß was Du machst, kann ich leider nur solche Allgemeinheiten von mir geben.

http://www.mysql.com/doc/T/i/Tips.html

mfg oesi50


[ Diese Nachricht wurde geändert von: oesi50 am 2002-07-24 23:09 ]
als Antwort auf: [#8005] Top
 
Miro Dietiker
Beiträge: 699
24. Jul 2002, 23:24
Beitrag #5 von 14
Beitrag ID: #8020
Bewertung:
(2202 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Perfomrance von MySQL und PHP


Hey Ollli!

Irgendwas machst du da wohl sehr tiefgründig falsch...
Solche Delays habe ich noch nie mit irgend einem script
produziert, selbst die Seite hds.ch (mit einigen
intensiveren Abfragen und viel mehr Updates pro Refresh
usw kommt eigentlich viel schneller..

Da sind manche SQL-Befehle die wirklich monsterhaft
sind verglichen mit "einfachen" projekten...

(Manchmal ist die Leitung etwas langsam, hat aber nix
mit dem PHP und mySQL zutun)

Bloss: Wo steckt da der Wurm drin?

GreeetZ: Miro
als Antwort auf: [#8005] Top
 
webgrauen
Beiträge: 20
25. Jul 2002, 07:57
Beitrag #6 von 14
Beitrag ID: #8024
Bewertung:
(2202 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Perfomrance von MySQL und PHP


mysql_free_result($deine_query_result);

Das kommt drauf an wie gross der Speicher deines Rechners ist. Resourcen einsparen heisst auf jeden Fall Geschwindigkeit gewinnen.



als Antwort auf: [#8005] Top
 
Ollli
Beiträge: 458
25. Jul 2002, 10:06
Beitrag #7 von 14
Beitrag ID: #8030
Bewertung:
(2202 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Perfomrance von MySQL und PHP


HI!

Also erstmal danke für die Antworten, ich werde versuchen heute Abend mal ein paar Sachen online zu stellen für euch.

Zum zweiten:
Es ist für mich immer noch nicht ganz rausgekommen, ob es nun an meinem lahmen Server liegt oder doch voll an den Queries?!
Aber ich vermute jetzt mal es liegt an den Queries, da ihr mir ja so viele Tips dazu gegeben habt

Mit dem mysql_free_result() habe ich noch nicht probiert, wird erst heute Abend.

Ollli
als Antwort auf: [#8005] Top
 
Miro Dietiker
Beiträge: 699
25. Jul 2002, 18:48
Beitrag #8 von 14
Beitrag ID: #8103
Bewertung:
(2202 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Perfomrance von MySQL und PHP


Ich würd sagen eindeutig Lahmer Server!

Ich weiss nicht, wie deine Queries genau ausschauen,
kann mir aber schlecht vorstellen, dass du jetzt solche
Monsterqueries generiert hast dass da tatsächlich 0.5s
Rechenzeit nötig wäre - und das mit sowenig datensätzen!

(Bei einer DB mit 100'000 Datensätzen warte ich ja auch
nicht 5 Minuten!!!)

GR: MDi
als Antwort auf: [#8005] Top
 
Ollli
Beiträge: 458
26. Jul 2002, 00:40
Beitrag #9 von 14
Beitrag ID: #8115
Bewertung:
(2202 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Perfomrance von MySQL und PHP


Also wenn es am Server liegt, dann liegt es am Webserver, denn ich habe jetzt mal eine Abfrage per Client gemacht und bin einmal auf 0.15 und einmal auf 0.05 sec gekommen.

Heute Abend ist es leider nicht mehr mit den Abfragen geworden, morgen aber

Ollli
als Antwort auf: [#8005] Top
 
Petra Rudolph p
Beiträge: 1554
26. Jul 2002, 08:11
Beitrag #10 von 14
Beitrag ID: #8117
Bewertung:
(2202 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Perfomrance von MySQL und PHP


Hi Ollli,

in der Ct 10/02 war ein Test von einigen Hostern im Hinblick auf die Datenbankgeschindigkeiten. Wenn du die noch hast, dann lies es mal durch. Ein Anriß ist hier:
http://www.heise.de/ct/02/10/112/default.shtml

Gruß Petra
als Antwort auf: [#8005] Top
 
Ollli
Beiträge: 458
26. Jul 2002, 09:44
Beitrag #11 von 14
Beitrag ID: #8128
Bewertung:
(2202 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Perfomrance von MySQL und PHP


Zitat:
Petra Rudolph schrieb am 2002-07-26 08:11 :
in der Ct 10/02 war ein Test von einigen Hostern im Hinblick auf die Datenbankgeschindigkeiten.
Danke für den Tip, aber der lahme Server ist mein lokaler Linux-Server, den haben die bestimmt nicht getestet
Mein Hoster dagegen ist super!! (5. Platz geworden bei webhostlist.de)

Ollli
als Antwort auf: [#8005] Top
 
Ollli
Beiträge: 458
26. Jul 2002, 20:02
Beitrag #12 von 14
Beitrag ID: #8194
Bewertung:
(2202 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Perfomrance von MySQL und PHP


Hier mal ein Query, das man verbessern könnte:

SELECT u.*,r.name AS rank_name FROM users u,ranks r WHERE r.id=u.rank and u.id='$user';

Dann habe ich eigentlich nur noch die Standard-Querys:
SELECT * FROM planets WHERE id='1'; z.B.
oder
SELECT column1,column2,colum12 FROM users WHERE id='1';

Kann man an denen auch noch was verbessern?

Und dann noch eine Frage:
Ist es besser lieber mehrere Anfragen zu stellen oder lieber eine große?
Sprich, ich muss einmal eine ganze Zeile von der User-DB und eine ganze Zeile von der Planet-DB einlesen, je 30 Angaben.
Sollte ich da lieber eine Anfrage machen oder zwei oder sogar mehr?

Ich hoffe, ihr versteht, was ich meine.

Schonmal DANKE im Voraus.

Ollli
als Antwort auf: [#8005] Top
 
oesi50  A  S
Beiträge: 2315
28. Jul 2002, 19:31
Beitrag #13 von 14
Beitrag ID: #8258
Bewertung:
(2202 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Perfomrance von MySQL und PHP


Hi Ollli,
Siehst Du, genau das meinte ich
Code:

... FROM users u,ranks r WHERE r.id=u.rank and u.id='$user';


Hier wird das kartesische Produkt gebildet, d.h. jede Reihe der einen Tabelle wird zuerst mit jeder Reihe der anderen Tabelle verknüpft, erst danach wird mit der WHERE Klausel die Bedingung geprüft.
Ersetze das mal durch:
Code:

... FROM users u LEFT JOIN ranks r ON r.id=u.rank WHERE u.id='$user'


Hier werden die Daten selektiv miteinander verknüpft.
Auch über das SELECT * freut sich der SQL-Server nicht besonders, schreibe lieber alle Spaltennamen so hin, wie Du sie brauchst. Verbessern kannst Du das noch, indem Du auf oft gesuchten Begriffen einen Index anlegst. Das bringt allerdings nur etwas, wenn in der betreffenden Tabelle nicht oft geändert wird, da bei jeder Änderung der indizierten Spalte INSERT,UPDATE,REPLACE,DELETE) der Index neu aufgebaut wird, was natürlich Zeit braucht.

Zu der zweiten Frage, es ist im Allgemeinen günstiger das mit einer Abfrage zu erledigen, dazu gibts ja den JOIN, weil der SQL-Server dafür gebaut wurde, aus einer Datenmenge genau die passenden Daten zu extrahieren.

mfg oesi
als Antwort auf: [#8005] Top
 
Ollli
Beiträge: 458
28. Jul 2002, 20:31
Beitrag #14 von 14
Beitrag ID: #8263
Bewertung:
(2202 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Perfomrance von MySQL und PHP


HI und erstmal danke für die Antwort!

Also ich sehe, dass ich da noch bissl was zu MySQL lesen muss

Ich werde dass dann alles mal so probieren und dann mal bescheit sagen. Wird aber noch bissl dauern, da ich im Moment nicht die Zeit habe

Aber DANKE nochmal!

Tschö
Ollli
als Antwort auf: [#8005] Top
 
X