phpbar.de logo

Mailinglisten-Archive

[php] Optimierung

[php] Optimierung

Johann-Peter Hartmann php_(at)_phpcenter.de
Tue, 10 Apr 2001 15:30:00 +0200


Hi Patrick, Liste,

Patrick Bierans schrieb:

> Ich habe viele MySQL-Abfragen und viel HTML per PHP und viele Includes
> und viele Arrays und viele Funktionen. Images, Tables und CSS werden
> auch reichlich genutzt. Es handelt sich um einen Shop. Momentan braucht
> der Apache pro Seite etwa 0.59 Sekunden zum Abarbeiten; Antwortszeit,
> Senden und Seitenaufbau kommen dann noch hinzu.

	Ja, das ist reichlich.

> Wo kann ich generell noch Zeit rausholen?
> Wo habt ihr Performance herausholen können?

	Hmm, imho wuerde es sich wahrscheinlich lohnen,
	noch mal die bearbeitungszeit der includes einzeln
	anzuschauen, und auch die Dauer der einzelnen mysql-Abfragen
	stoppen.

	Es gibt afaik selbst bei den gleichen includes
	je nach webserver und Plattform sehr unterschiedliche
	Zeiten, zumindest hatte Ulf mal auf Solaris auch
	mit langsamen includes zu kaempfen .


> > > > Wo wird am meisten Rechnenzeit verschwendet?

	Ohne viele Messpunkte schwer zu sagen :-) .

> > Außer man macht's als PHP-CGI, aber dann dauert der Aufbau länger.
> Hat jemand in diesem Zusammenhang Erfahrungswerte?

	Hmm, ich halte es fuer unwahrscheinlich, dass
	der Einsatz von CGI beschleunigend wirken wuerde.

	Wenn, dann schon eher ein anderer Webserver
	wie z.B. thttpd, der neben threads auch throttling
	bietet. Und evtl. in der Zusammenarbeit mit
	php4 hinreichend stabil ist, seitdem sascha
	den IRCG auf dieser Basis gebaut hat.

	Auch der Apache 2 unterstuetzt Thr[eads|ottling] .

	Aber die reine CPU-Rechenzeit durch PHP wird davon
	natuerlich nicht beeinflusst.

> > > [...] Application-Server [...] mit SharedMemory [...] simulieren
> > > [...] unglueckliches SQL-Design [...]

	Hmm, shared memory koennte imho wirklich etwas
	bringen.

	Meiner Erfahrung nach ist das Holzhammer-Locking
	bei MySQL problematisch, wenn man ueber Sessions- und
	Logging-Funktionalitaet sehr viele Inserts erzeugt,
	weil diese je nach zugrundeliegenden Tabellentyp
	gleich die ganze Tabelle / viele Zeilen locken.

	Wenn man einen Teil dieser Angaben in den shared
	mem legen kann, sollte das etwas helfen.

	Wenn bei jedem Zugriff grosse Strukturen aus der
	Datenbank oder auch umstaendlich erzeugt weden muessen,
	kann es helfen, diese ebenfalls im shared mem
	vorzuhalten.

	Wenn die Inserts nicht gleich wieder gebraucht werden,
	kann man das MySQL mit "Insert delayed" tunen.

	Ausserdem sollte man sich die gesamte Cache-
	Funktionalität in Pear anschauen, vielleicht lassen
	sich so ja noch einige Funktionsergebnisse
	aufbewahren.

	Viele Grüße, vielleicht hilfts ja ein bischen,
	-johann




php::bar PHP Wiki   -   Listenarchive