Mal eine andere Frage: Ist das bei Euch im Rootforum nicht auch schon "Trollen" wenn jemand unbedingt recht haben will und immer abstruser wird?
Jetzt kommst Du plötzlich mit memcached.
Und ja, ist eine sinnvolle
Ergänzung. Ich nutze sie meist für Session-Daten, damit die eben nicht ständig aus der DB geholt werden müssen.
Aber willst Du als 'Webhoster' einem Kunden der sich über eine zu langsame DB beschwert sagen: "Dann Programmier Dein xt:Commerce|Wordpress|Drupal|... doch auf memcached um!"
memcached wird auch auf mysql Db Seite genutzt.
http://dev.mysql.com/doc/refman/5.1/en/ha-memcached-using.html
Die Implementierung in die Anwendung erfolgt an zentraler Stelle.
Aber alternativ mit weniger Aufwand propagiere ich schon die ganze Zeit die Verwendung von InnDB.
Ich habe auch nicht verleugnet, dass mit dem Einsatz von memcached Aufwände entstehen.
Ergänzend dazu zum alten leidigen Thema und owohl es auf performanceblog gut beschrieben ist.
Der query-cache wurde für einen "ganz besonderen" Fall konzipiert.
Hohe Reads, ggf. komplexe Abfragen mit Joins etc. und sehr geringer Änderung der Datenbasis.
Und hier trumpft der query-cache 1a.
Alles was deutlich davon abweicht macht den Vorteil zunichte.
Wenn man dieses nicht ernsthaft berücksichtigt, kannn es sogar dazu führen, dass plötzlich der IO des RAMs zum Engpass wird.
Auch das habe ich schon mehrfach erlebt, weil Entwickler den query-cache als die Lösung für alle Designfehler gesehen haben.
Die Ursache hierbei liegt meistens darin, dass man nachfolgenden Fakt unterschätzt:
Der Querycache erfordert min. 2 fachen IO auf dem RAM.
1. Lesen der Daten , was u.U. auch schon im RAM liegt,
2. Schreiben des Ergebnis in den RAM
3. Lesen der Ergebnis für die auslieferung.
Ist obige "Anforderung" gegeben. Keine Änderung auf der Datenbasis, holt sich der Query-Cache die Daten direkt aus dem RAM.
Ein lesender Zugriff auf die schon richtige Ergebnismenge.
Limitierende Faktoren sind nun die Grösse des definierten Query-Caches, denn kommen mehr Objekte hinzu als dieser Fassen kann, plumpsen andere wieder raus und müssen wieder explizit geladen werden.
Ungünstige Joins und Abfragen können den Cache vollständig in Beschlag nehmen. Die max. Objektgrösse kann man jedoch limitieren. Auch ist es möglich, bestimmte Tabellen und Abfragen quasi zu blacklisten.
Auf einer "Webhosting" Umgebung wessen Änderungen der anwendungen der Webanwendungen etc. nicht im eigenen Verantwortungsbereich liegt (quasi Kunden einspielen können was sie wollen, ohne dass man es selbt mit bekommt) ist der Wartungsaufwand um solche Ausschlusslisten zu pflegen, sehr hoch bis gar nicht mehr machbar.