<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SysEleven - Hosting für Fortgeschrittene &#187; Performance</title>
	<atom:link href="http://www.syseleven.de/tag/performance/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.syseleven.de</link>
	<description></description>
	<lastBuildDate>Tue, 24 Jan 2012 16:33:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Endlich: Datenbankskalierung in OXID</title>
		<link>http://www.syseleven.de/blog/2146/endlich-datenbankskalierung-in-oxid/</link>
		<comments>http://www.syseleven.de/blog/2146/endlich-datenbankskalierung-in-oxid/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 10:29:25 +0000</pubDate>
		<dc:creator>Andreas Mauf</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[oxid]]></category>
		<category><![CDATA[Skalierung]]></category>

		<guid isPermaLink="false">http://www.syseleven.de/?p=2146</guid>
		<description><![CDATA[Seit nunmehr drei Jahren beschäftigen wir uns intensiv mit der Performance-Steigerung von OXID-Shops und haben in dieser Zeit so einigen lahmen wieder Beine gemacht. Heute sind wir besonders stolz darauf, dass wir nun auch die letzte Skalierungsbarriere meistern konnten: Datenbankskalierung bei OXID.]]></description>
			<content:encoded><![CDATA[<p>Seit nunmehr drei Jahren beschäftigen wir uns intensiv mit der Performance-Steigerung von OXID-Shops und haben in dieser Zeit so einigen lahmen wieder Beine gemacht. Heute sind wir besonders stolz darauf, dass wir nun auch die letzte Skalierungsbarriere meistern konnten: Datenbankskalierung bei OXID.</p>
<h2>OXID-Setups bisher</h2>
<p>OXID-Shops bestehen bisher oftmals aus mehreren PHP-Applikation-Servern und &#8211; jetzt kommt der Knackpunkt &#8211; einem Datenbank-Server.</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/Single-DB.gif" alt="" title="Single-DB" width="425" height="481" class="aligncenter size-full wp-image-2147" /></p>
<h2>Warum nur ein Datenbank-Server?</h2>
<p>Leider unterstützt OXID nativ nur eine Datenbank. Für viele kleine Shops reicht das völlig aus. Bei unseren Zöglingen jedoch wird die Datenbank zum Bottleneck. Wenn die Datenbank überlastet ist, helfen auch keine weiteren Applikation-Server mehr. Der einzige Ausweg ist dann ein größerer Datenbank-Server. Aber was, wenn es keinen größeren Server mehr gibt? Mehr als 24 CPU-Kerne gibt es heute nun mal nicht zu kaufen. Wem also der größte Datenbankserver nicht ausreicht, muss <a href="/blog/1934/oxid-super-cache-mehr-power-fur-den-shop/">erfinderisch werden</a>. In der Version 5.0 wird OXID dieses Problem angehen, wir freuen uns schon sehr auf diese Änderung. Für alle Performancehungrigen, die nicht bis dahin warten können (oder wollen), haben wir bereits heute eine Lösung!</p>
<h2>Zukünftige OXID-Setups bei SysEleven</h2>
<p>Durch eine SysEleven-Erweiterung in OXID können Datenbankanfragen des Shops nunmehr auf mehrere Server verteilt werden. Für die Echtzeit-Synchronisation der Datenbank-Server nutzen wir das altbekannte MySQL-Feature &#8220;Master-Slave-Replikation&#8221;.</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/DB-Scaling.gif" alt="" title="DB-Scaling" width="425" height="481" class="aligncenter size-full wp-image-2148" /></p>
<p>In dem hier dargestellten Setup werden die Anfragen von zwei Datenbank-Servern abgearbeitet. Dadurch erhöhen wir die Gesamtkapazität (nicht die Geschwindigkeit) des Shops und kommen dem <a href="http://www.oser.org/~hp/bsyII/node6.html">horizontalen Skalieren</a> wieder einen Schritt näher. Einziger Nachteil der Master-Slave-Replikation ist, dass man in der Slave-Datenbank nur lesen darf (read only), Änderungen der Daten müssen immer auf dem Master erfolgen. </p>
<h2>Wie viel bringt es?</h2>
<p>In einer Referenzmessung konnten wir die CPU-Belastung im Datenbank-Master auf die Hälfte reduzieren, sobald Abfragen auch vom Slave abgearbeitet wurden.</p>
<p><br/><img src="http://www.syseleven.de/wp-content/uploads/DB-CPU-Graphs.gif" alt="" title="DB-CPU-Graphs" width="425" height="573" class="aligncenter size-full wp-image-2149" /></p>
<p>Je besser die Last verteilt werden kann, umso höher ist die Kapazität des Shops, d.h. umso mehr gleichzeitige Besucher können bedient werden. Wem die zusätzliche Power von einem Datenbank-Slave nicht ausreicht, kann einfach mehrere Slaves verwenden.</p>
<h2>Welche Queries werden auf die Slaves ausgelagert?</h2>
<p>Wie bereits erwähnt, dürfen die Slaves nur lesen und keine Daten verändern. Zudem gibt es Queries, z.B. während des Bestellprozesses, die zwingend auf dem Master ausgeführt werden sollten. Wir müssen also aufpassen, welche Queries wir vom Master und welche von den Slaves verarbeiten lassen. Üblicherweise unterscheidet man an dieser Stelle ganz simpel zwischen lesenden (select) und schreibenden (insert, update, delete, replace) Queries. Das reicht uns jedoch nicht: Wir wollen keine gleichmäßige Verteilung, sondern den bestmöglichen Performancegewinn. Um das zu realisieren, ist es entscheidend, die richtigen Queries auf die Slaves auszulagern. Eine Query, die beispielsweise nur 5% der gesamten MySQL-Rechenzeit ausmacht, kann gerne auf dem Master bleiben, wenn dafür eine andere Query, die für 30% der Rechenzeit verantwortlich ist, verteilt werden kann. Wir suchen also die &#8220;teuren&#8221; Queries! Dazu erstellen wir ein individuelles <a href="/blog/1906/performance-profliling-bei-syseleven/">MySQL-Profiling</a> für Ihren Shop und ermitteln die 5 oder 10 &#8220;teuersten&#8221; Queries. Meistens machen diese Queries summiert mehr als 70% oder 80% der gesamten MySQL-Rechenzeit aus.</p>
<h2>Wann bekommt Ihr OXID-Shop den SysEleven-Faktor?</h2>
]]></content:encoded>
			<wfw:commentRss>http://www.syseleven.de/blog/2146/endlich-datenbankskalierung-in-oxid/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Weihnachten bei SysEleven</title>
		<link>http://www.syseleven.de/blog/2118/weihnachten-bei-syseleven/</link>
		<comments>http://www.syseleven.de/blog/2118/weihnachten-bei-syseleven/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 10:15:29 +0000</pubDate>
		<dc:creator>Thomas Lohner</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Fun & Stuff]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[private Cloud]]></category>
		<category><![CDATA[Weihnachten]]></category>

		<guid isPermaLink="false">http://www.syseleven.de/?p=2118</guid>
		<description><![CDATA[Da ist sie wieder, die Weihnachtszeit - die Zeit der Besinnlichkeit und der Vorfreude. Es wird gebacken, gelacht und Glühwein getrunken. Aber nicht in unserer Welt...]]></description>
			<content:encoded><![CDATA[<p>Da ist sie wieder, die Weihnachtszeit &#8211; die Zeit der Besinnlichkeit und der Vorfreude. Es wird gebacken, gelacht und Glühwein getrunken. Aber nicht in unserer Welt. In der Welt des E-Commerce herrschen andere Spielregeln. Für die Artisten des E-Commerce Wanderzirkus gibt es Überstunden statt Glühwein und Urlaubssperre statt Familienessen. Weihnachtszeit &#8211; Ausnahmezustand.<span id="more-2118"></span></p>
<p>Wir bei SysEleven tun alles dafür, um Euch Shopbetreibern während dieser Zeit zumindest eine Sorge abzunehmen. Die Arbeitsteilung ist dabei ganz simpel: Ihr konzentriert Euch auf das Business, wir kümmern uns um die Server. In der SysEleven Private Cloud können wir jedem Server während des Betriebs <a href="/ueberuns/flexible-performance/">mehr Power</a> geben, damit wir ruckelfrei durchs Weihnachtsgeschäft kommen.</p>
<p>Die Erleichterung wird sofort sichtbar, so sehen glückliche Server aus:</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/cpu.gif" alt="" title="cpu" width="425" height="676" class="aligncenter size-full wp-image-2119" /></p>
<p>Im Namen des gesamtem SysEleven-Teams wünsche ich Euch allen eine erfolgreiche und sorgenfreie Weihnachtszeit. Und jetzt keine Blogs mehr lesen, sondern ab an die Arbeit, die Kunden warten auf die Pakete.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syseleven.de/blog/2118/weihnachten-bei-syseleven/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OXID Super Cache: Mehr Power für den Shop</title>
		<link>http://www.syseleven.de/blog/1934/oxid-super-cache-mehr-power-fur-den-shop/</link>
		<comments>http://www.syseleven.de/blog/1934/oxid-super-cache-mehr-power-fur-den-shop/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 17:57:14 +0000</pubDate>
		<dc:creator>Thomas Lohner</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Caching]]></category>
		<category><![CDATA[Super Cache]]></category>

		<guid isPermaLink="false">http://www.syseleven.de/?p=1934</guid>
		<description><![CDATA[Katapultieren Sie die Performance Ihres Shops in neue Dimensionen. Die durchschnittliche Ladezeit von 0,1 Sekunde ist gut für Ihre Kunden und Ihr Google-Ranking - und schlecht für Ihre Mitbewerber.]]></description>
			<content:encoded><![CDATA[<p>Gemeinsam mit OXID Solution Partner <a href="http://shop.fatchip.de/OXID-eShop-Module/OXID-Modul-Supercache.html" target="_blank">FATCHIP</a> haben wir den OXID Super Cache entwickelt. Mit dem OXID Super Cache katapultieren Sie die Performance Ihres Shops in neue Dimensionen. Die durchschnittliche Ladezeit des HTML-Codes beträgt 0,1 Sekunde. Das ist gut für Ihre Kunden und Ihr Google-Ranking &#8211; und schlecht für Ihre Mitbewerber.</p>
</p>
<h1>Wirkungsweise</h1>
<p>Der OXID Super Cache wird vor die eigentlichen Shop-Server geschaltet und kann dort einen wesentlichen Teil des Traffics abfangen und beschleunigen. Die Lastverteilung und Wirkungsweise ist in den beiden folgenden Grafiken dargestellt.<br />
<img src="http://www.syseleven.de/wp-content/uploads/nocache.gif" alt="" title="Lastenverteilung ohne Super Cache" width="435" height="602" class="aligncenter size-full wp-image-1985" /></p>
<p>Alle Anfragen an den Shop werden von PHP und MySQL bearbeitet und bei jedem einzelnen Seitenaufruf aufs Neue berechnet, zusammengebaut und zum Schluss ausgegeben. Web- und Datenbankserver sind ständig belastet.</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/Sys11-Supercache.gif" alt="" title="Wirkungsweise SysElven Super Cache" width="435" height="700" class="aligncenter size-full wp-image-1939" /></p>
<p>Der OXID Super Cache speichert das fertige HTML und liefert es ab dem zweiten Aufruf derselben Seite direkt aus. Nur noch ein Bruchteil der Anfragen schlagen auf Web- und Datenbank-Server durch. Das entlastet die Systeme und sorgt für mehr Performance und steigert die Kapazität.</p>
</p>
<h1>Zahlen und Fakten</h1>
<p>Durch den OXID Super Cache werden die Server nicht nur entlastet, der Cache ist auch sehr viel performanter als ein Webserver und kann die Seiten um ein Vielfaches schneller ausliefern. Die spezielle Abstimmung auf höchste Performance macht den Super Cache sogar noch schneller als den OXID Dynamic Content Cache in der Enterprise Edition.</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/seitenladezeit.gif" alt="" title="SysEleven Super Cache: Seitenladezeit" width="435" height="300" class="aligncenter size-full wp-image-1940" /></p>
<p>Durch den Einsatz des OXID Super Caches können Sie die Seitenladezeit auf ca. 0,1 Sekunde verringern. Dieser Wert wird hauptsächlich durch die Geschwindigkeit der DSL-Verbindung begrenzt, direkt am Cache gemessen beträgt die Seitenladezeit sogar nur 0,01 Sekunde.</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/queries_per_second.gif" alt="" title="SysEleven Super Cache: Queries per Second" width="435" height="320" class="aligncenter size-full wp-image-1942" /></p>
<p>Alle Seitenaufrufe, die direkt vom Super Cache ausgeliefert werden, verursachen keine einzige Abfrage in der Datenbank.</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/hits_per_second.gif" alt="" title="SysEleven Super Cache: Hits per Second" width="435" height="300" class="aligncenter size-full wp-image-1943" /></p>
<p>Der Super Cache ist auf hohen Durchsatz optimiert und kann im Vergleich zu Webservern ein Vielfaches an Seiten pro Sekunde ausliefern. Das ist besonders wichtig bei High-Traffic-Kampagnen wie zum Beispiel TV-Werbung, sehr großen Newsletter-Verteilern oder Ein-Tages-Gutscheinaktionen.</p>
</p>
<h1>Wie viel bringt der Super Cache?</h1>
<p>Die folgende Grafik zeigt die Erfolgsquote des Cachings bei einem unserer Kunden. 64% aller Seitenaufrufe werden aus dem Cache ausgeliefert. Das bedeutet, mehr als die Hälfte aller Zugriffe sind rasend schnell und verursachen keine Last auf den Servern. Die Shop-Server müssen sich nur noch um die Hälfte der Zugriffe kümmern.</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/SuperCache_Hitrate.gif" alt="" title="SuperCache_Hitrate" width="425" height="293" class="aligncenter size-full wp-image-1961" /></p>
</p>
<h1>Intelligentes Caching</h1>
<p>Die Idee einzelne Elemente nicht jedes mal neu zu berechnen, sondern zwischenzuspeichern ist nicht neu. Ganz im Gegenteil, simples Caching kann heutzutage fast jede Software. Das besondere am OXID Super Cache ist die intelligente Cacheverwaltung. Wenn sich ein Artikel ändert oder ausverkauft ist, werden automatisch alle Seiten aus dem Cache entfernt, auf denen der Artikel zu sehen ist. Dadurch sind Sie nicht mehr wie bisher üblich an Cache-Laufzeiten gebunden, sondern Änderungen werden sofort sichtbar. </p>
<h1>Referenz-Installation</h1>
<p>Überzeugen Sie sich selbst von der Performance des OXID Super Cache. Bei unserem Kunden <a href="http://www.schuhtempel24.de/" title="http://www.schuhtempel24.de/" target="_blank">http://www.schuhtempel24.de/</a> können Sie ausprobieren wie schnell Ihr Shop sein könnte. Mit über 1 Million Seitenaufrufen pro Tag zählt Schuhtempel24 zu den High-Traffic OXID Installationen. Unser Super Cache macht den Shop schneller als die Konkurrenz erlaubt.</p>
<p><a href="http://www.schuhtempel24.de/" target="_blank"><img src="http://www.syseleven.de/wp-content/uploads/Schuhtempel24.de_.jpg" alt="" title="Schuhtempel24.de" width="425" height="328" class="aligncenter size-full wp-image-1973" /></a></p>
</p>
<div class="special-outer"><div class="special-inner">
<h1>Key Features: OXID Super Cache</h1>
<ul>
<li>0,1 Sekunde Ladezeit</li>
<li>Entlastung der Server</li>
<li>Cache-Daten im RAM (= turbo schnell)</li>
<li>intelligente Erkennung welche Aufrufe gecacht werden dürfen</li>
<li>automatische Aktualisierung bei Änderungen</li>
<li>Verwaltung im OXID Admin-Interface </li>
<li>individuelle Cachezeiten je Seitenart</li>
<li>API für eigene Erweiterungen</li>
<li>Kompatibel zu allen OXID 4.x Versionen</li>
</ul>
<p></div></div><br />
<img src="http://www.syseleven.de/wp-content/uploads/fatchip_syseleven.gif" alt="" title="fatchip_syseleven" width="435" height="80" class="aligncenter size-full wp-image-1949" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.syseleven.de/blog/1934/oxid-super-cache-mehr-power-fur-den-shop/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Performance-Profliling bei SysEleven</title>
		<link>http://www.syseleven.de/blog/1906/performance-profliling-bei-syseleven/</link>
		<comments>http://www.syseleven.de/blog/1906/performance-profliling-bei-syseleven/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 12:40:26 +0000</pubDate>
		<dc:creator>Thomas Lohner</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Profiling]]></category>

		<guid isPermaLink="false">http://www.syseleven.de/?p=1906</guid>
		<description><![CDATA["Bei uns hört die Dienstleistung nicht auf, wenn die Lampe am Server grün leuchtet" - Lesen Sie in diesem Blogbeitrag wie wir bei SysEleven die Performance Ihrer Webseite analysieren.]]></description>
			<content:encoded><![CDATA[<p>&#8220;Bei uns hört die Dienstleistung nicht auf, wenn die Lampe am Server grün leuchtet&#8221; &#8211; das ist nicht nur einer der Sätze, mit denen ich in letzter Zeit am Liebsten zitiert werde, sondern auch der Titel einer neuen Blogreihe, in der ich erklären möchte, was bei SysEleven anders ist als bei herkömmlichen Hostinganbietern. Wir haben eine besondere Einstellung zu dem was wir tun und wie wir es tun &#8211; wir nennen das den SysEleven Faktor.</p>
<p>Im heutigen Teil dieser Reihe geht es um die Steigerung der Performance von Webseiten oder E-Commerce Shops. Manche unserer Kunden nennen das „Serverpower“ oder gerne auch „Vollgas Hosting“. Und da haben wir auch schon das Missverständnis: Natürlich gehören zu einer schnellen Webseite auch schnelle Server &#8211; aber nicht nur. Die Performance der Software ist ebenso wichtig. Die besten und schnellsten Server machen Ihre Webseite nicht schneller, wenn die Software mit angezogener Handbremse fährt &#8211; und umgekehrt genauso.</p>
<blockquote><p><span style="font-size:1.2em;">Die Performance einer Webseite wird durch das schwächste Glied der Kette bestimmt und nicht etwa durch die schnellste Komponente des Setups, wie viele irrtümlich glauben.</span></p></blockquote>
<p>Die erste und wichtigste Teilaufgabe bei der Optimierung von Webperformance lautet also: Finde das schwächste Glied der Kette. Fachleute nennen das den Flaschenhals bzw. das Bottleneck. Je mehr Änderungen es beispielsweise an einem Online-Shop gab und je mehr Köche den Brei gerührt haben, umso komplexer und schwieriger wird die Suche nach dem Bottleneck. Erschwerend kommt hinzu, dass es laut unserer Erfahrung im Grunde nie ein einzelnes, sichtbares Bottleneck gibt. Meistens finden wir eine Verkettung „unglücklicher Umstände“ und „gewachsener Strukturen“, die gemeinsam die Performance in den Keller ziehen. Nicht selten finden wir sogar Features, die schon lange nicht mehr benutzt werden, aber immer noch aktiv sind und Last erzeugen.</p>
<p>
<h1>Was ist das Ziel?</h1>
</p>
<p>Das Ziel des Performance-Profilings ist die Identifikation der Bottlenecks. Als Ergebnis dieser Analyse sollte ein Maßnahmenkatalog mit konkreten Verbesserungsvorschlägen und Aufgaben vorliegen. Im Übrigen gehört zum SysEleven Faktor auch, dass es an dieser Stelle eine strikte Trennung gibt: Wir helfen dabei die Bottlenecks zu finden und liefern eine Anleitung wie sie behoben werden können. Die hardware- bzw. serverseitige Umsetzung erfolgt direkt durch uns und die softwareseitige Umsetzung erfolgt durch die Agentur des Kunden bzw. durch die Entwickler, die das jeweilige Setup viel detaillierter kennen. Das beste Ergebnis lässt sich erzielen, wenn Hostinganbieter, Agentur und Entwickler zusammenarbeiten.</p>
<p>
<h1> Wie finden wir die Bottlenecks?</h1>
</p>
<p>Zunächst erfolgt eine Bestandsaufnahme: Server, Software, Versionsnummern, Konfigurationen, aktuelle Auslastung, Besonderheiten. Für die detaillierte Untersuchung der Performance unterteilen wir das Setup in zwei Kategorien: Komponenten und Seitentypen. Die einzelnen Komponenten etwa eines Shops sind die Shopsoftware (z.B. PHP), die Datenbank (z.B. MySQL) und externe Webservices (z.B. Suchanbieter). Jede dieser Komponenten kann Bottlenecks verursachen und wird deshalb einzeln analysiert und getestet. Im zweiten Schritt unterscheidet man zwischen verschieden Seitentypen, bei einem Shop sind das meist die Startseite, Kategorieseite, Produktseite und die Suche. Jeder dieser Seitentypen hat individuelle Funktionen und Anforderungen &#8211; und damit auch potentiell individuelle Bottlenecks.</p>
<p>
<h1>Seitenladezeit</h1>
</p>
<p>Einer der sichtbarsten Indikatoren für die Performance der Webseite ist die Seitenladezeit. Als Referenzwerte für eine spätere Erfolgsmessung wird die Ladezeit jedes Seitentyps einzeln gemessen:<br />
<img src="http://www.syseleven.de/wp-content/uploads/curl.gif" alt="" title="Seitenladezeit" width="386" height="125" class="aligncenter size-full wp-image-1908" /></p>
<p>
<h1>Bottlenecks in MySQL finden</h1>
</p>
<p>Bei der Analyse von MySQL unterscheiden wir im Wesentlichen zwischen zwei Arten von Last:</p>
<ul>
<li>Den Datenbankabfragen, die ein einzelner Aufruf eines Seitentyps verursacht.</li>
<li>Der Gesamtauslastung aller Datenbankabfragen während des Livebetriebs.</li>
</ul>
<p>Für jeden der ermittelten Seitentypen wird analysiert, welche Datenbankabfragen bei einem einzelnen Seitenaufruf ausgeführt werden. Die „teuersten“ Queries kommen auf die Merkliste für eine genauere Untersuchung. Ich habe schon so Einiges gesehen und bin dennoch immer wieder überrascht wie viele Datenbankabfragen von einem einzigen Seitenaufruf verursacht werden können. Mehrere Hundert sind hier leider keine Seltenheit! Da gibt es oft  &#8211; ich formuliere es mal so &#8211; Verbesserungspotential. ;-)</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/SQL-Profile.png" alt="" title="SQL-Profile" width="434" height="196" class="aligncenter size-full wp-image-1912" /></p>
<p>In diesem Beispiel hat ein einzelner Aufruf der Startseite eines Online Shop 296 Datenbankabfragen verursacht, hier gibt es sicher den einen oder anderen Ansatzpunkt für eine genauere Untersuchung.</p>
<p>Die Gesamtbelastung der Datenbank wird untersucht, indem alle Datenbankabfragen, idealerweise während einer Lastspitze, in einem Logfile protokolliert werden. Aus diesem Logfile wird ein Query-Profil erstellt. Das ist eine nach Rechenzeit sortierte Liste ähnlicher Queries. Dabei ist die Verteilung der verbrauchten Rechenzeit relevant und nicht etwa die Ausführungszeit der einzelnen Queries. Dauert eine Abfrage beispielsweise sehr lange, wird aber nur selten ausgeführt, hat sie wenig Einfluss auf die Gesamtperformance. Uns interessiert also vielmehr, wieviel Anteil an der gesamten Datenbankrechenzeit auf ähnliche Queries entfallen.</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/sql_profile.gif" alt="" title="sql_profile" width="427" height="233" class="aligncenter size-full wp-image-1915" /></p>
<p>Hier sieht man zum Beispiel, dass die obere Query (nur der Anfang ist dargestellt) 32,5% der gesamten MySQL-Rechenzeit ausgemacht hat. Diese Query ist somit unser Kandidat #1 auf dem Prüfstand ist. Ob es zusätzlich auch Queries gab, die 10 Sekunden gedauert haben, im Testzeitraum aber nur dreimal aufgerufen wurden, ist in der Gesamtbetrachtung der Performance unerheblich.</p>
<p>
<h1>Zwischenstand</h1>
</p>
<p>Bevor es an das PHP-Profiling geht, lohnt sich an dieser Stelle eine Zwischenrechnung, die für jeden der anfangs ermittelten Seitentypen einzeln angewendet wird:</p>
<p>Seitenladezeit &#8211; Summe der Zeit aller MySQL-Queries &asymp; Ausführungszeit in PHP</p>
<p>Das Ergebnis entspricht nur sehr grob der PHP-Ausführungszeit, dennoch können wir den Wert an dieser Stelle als Entscheidungsgrundlage benutzen, ob sich jeder weitere Aufwand überhaupt noch lohnt oder ob die Bottlenecks bereits gefunden sind.</p>
<p>
<h1>Bottlenecks in PHP finden</h1>
</p>
<p>Für das Profiling in PHP gelten im Grunde dieselben Regeln wie für MySQL. Jeder Seitentyp wird einzeln untersucht. Auch hier ist besonders die Verteilung interessant. Welche Klasse oder Methode verursacht wie viel Prozent der gesamten Ausführungszeit?</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/php_profile.gif" alt="" title="php_profile" width="425" height="266" class="aligncenter size-full wp-image-1918" /></p>
<p>
<h1>Fazit</h1>
</p>
<p>Die Performance einer Webseite zu steigern ist einfach &#8211; wenn man vorher die tatsächlichen Bottlenecks gefunden hat. Sehr oft begegnen uns Projekte, bei denen alle möglichen Best-Practices angewendet wurden und die Seite dennoch unbefriedigend langsam ist. Kein Wunder, wenn an den echten Bottlenecks vorbei-optimiert wurde. Der Erfolg bleibt aus und der Frust ist groß. Ein detailliertes Performance-Profiling ist zwar sehr komplex und aufwendig, es rentiert sich aber sehr schnell durch echte Ergebnisse.</p>
<p>
<h1>Wann bekommt Ihre Webseite den SysEleven Faktor?</h1>
</p>
<p>SysEleven ist spezialisiert auf High-Performance-Webseiten und wir sind stolz auf jedes einzelne bei uns betreute Projekt. Wir freuen uns persönlich über jede neue Herausforderung. Derzeit liegt der Rekord bei 1440 MySQL Queries für einen einzigen Seitenaufruf.</p>
<p>Wer bietet mehr? ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syseleven.de/blog/1906/performance-profliling-bei-syseleven/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>APC: Turbo für PHP Webseiten</title>
		<link>http://www.syseleven.de/blog/1009/apc-turbo-fur-php-webseiten/</link>
		<comments>http://www.syseleven.de/blog/1009/apc-turbo-fur-php-webseiten/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 09:25:46 +0000</pubDate>
		<dc:creator>Thomas Lohner</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[APC]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.syseleven.de/?p=1009</guid>
		<description><![CDATA[Die Geschwindigkeit einer PHP basierten Webseite lässt mich mit einfachen Mitteln verbessern. Wordpress zum Beispiel wird mit APC viermal schneller.]]></description>
			<content:encoded><![CDATA[<p>Im Gegensatz zu anderen Programmiersprachen werden PHP-Skripte während des Aufrufs kompiliert, d.h. in eine ausführbare Form übersetzt und ausgeführt. Dieser Prozess wird bei jedem einzelnen Aufruf der Datei wiederholt. Das ist wenig effizient und lässt sich mit verschiedenen Mitteln leicht ändern.</p>
<p><a href="http://de.php.net/manual/de/book.apc.php">APC</a> ist ein so genannter &#8220;Opcode Cache&#8221;. Die Aufgabe von APC ist es, sich den aufwendigen Kompiliervorgang für spätere Zugriffe zu merken, damit dieser nur einmal ausgeführt werden muss. Bei jedem weiteren Aufruf der Datei liegt diese bereits vorkompiliert im Arbeitsspeicher.</p>
<h2>Wie viel schneller wird meine Webseite?</h2>
<p>Als Beispiel habe ich die Performance <del>einer</del> unserer WordPress-Installationen gemessen. Mit dem Tool Apache Bench (alternativ http_load oder jmeter) kann man ermitteln wie oft eine Webseite in einem festgelegten Zeitraum aufgerufen werden kann. Daraus ergibt sich die Geschwindigkeit der Webseite in der Einheit &#8220;Aufrufe pro Sekunde&#8221; (Requests per second). Je höher diese Zahl, desto schneller ist die Webseite. Oder anders herum, desto mehr Anfragen können je Zeiteinheit bearbeitet werden.</p>
<p><br/><b>Test 1: WordPress mit standard PHP</b><br />
<div class="special-outer"><div class="special-inner"><code>ab -t 60 -c 20 http://SysEleven.de/</p>
<p>Time taken for tests:   60 seconds<br />
Complete requests:      341<br />
Requests per second:    5.66 [#/sec]<br />
</code><br />
</div></div></p>
<p><br/><b>Test 2: WordPress mit aktiviertem APC</b><br />
<div class="special-outer"><div class="special-inner"><code>ab -t 60 -c 20 http://SysEleven.de/</p>
<p>Time taken for tests:   60 seconds<br />
Complete requests:      1294<br />
Requests per second:    21.57 [#/sec]<br />
</code><br />
</div></div></p>
<h2>Ein Fazit</h2>
<p>WordPress ist mit APC knapp <b>viermal schneller</b> als ohne. Aber: Wie viel schneller eine Webseite tatsächlich wird, hängt von der verwendeten Software ab. <b>Wichtig:</b> Nicht jede Software ist kompatibel zu APC, aber ein Versuch lohnt sich allemal. </p>
<p>Die Auslastung des Caches und die Erfolgsquote (Hits/Misses) ist, stellt APC in Diagrammen dar:</p>
<p><img src="http://www.syseleven.de/wp-content/uploads/2010/03/apc_status.gif" alt="" title="apc_status" width="425" height="224" class="aligncenter size-full wp-image-1031" /></p>
<h2>Alternativen</h2>
<p>Neben APC gibt es noch <a href="http://eaccelerator.net/">eAccelerator</a> und <a href="http://xcache.lighttpd.net/">XCache</a>. Performancemäßig nehmen die drei sich wenig, welche Software man einsetzt ist eher Geschmacksache bzw. eine Frage der Kompatibilität &#8211; was mit dem einen Cache nicht kompatibel ist, wird mit einem anderen vielleicht doch funktionieren. Das hartnäckige Gerücht, <a href="http://www.zend.com/de/products/guard/zend-optimizer">Zend Optmizer</a> gehöre auch dazu, ist übrigens falsch. Zend Optimizer &#8220;optimiert&#8221; zwar den Quellcode, ist aber kein Cache und merkt sich diese Verbesserungen nicht. Im Gegenteil: Die gleiche Arbeit wird bei jedem Aufruf erneut ausgeführt. Aus Sicht der Performance ist das wenig förderlich, weil es durch die ständige Mehrarbeit die Ausführung von PHP sogar noch verlangsamen kann.</p>
<h1>Links</h1>
<p><a href="http://de.php.net/manual/de/book.apc.php">http://de.php.net/manual/de/book.apc.php</a><br />
<a href="http://www.zend.com/de/community/php">http://www.zend.com/de/community/php</a><br />
<a href="http://eaccelerator.net/">http://eaccelerator.net/</a><br />
<a href="http://xcache.lighttpd.net/">http://xcache.lighttpd.net/</a><br />
<a href="http://httpd.apache.org/docs/2.2/programs/ab.html">http://httpd.apache.org/docs/2.2/programs/ab.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.syseleven.de/blog/1009/apc-turbo-fur-php-webseiten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

