Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Performance-Optimierungen in einem Forum

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
xAaron
PostRank 5
PostRank 5
Beiträge: 329
Registriert: 23.08.2009, 18:10

Beitrag von xAaron » 30.09.2009, 22:32

oh Fehler von meiner Seite: ich hab gesehen, dass mysql einen Query-cacher hat. Das heißt: die Abfragen kamen nicht aus dem Index, sondern aus dem cache(wäre sonst auch sehr, sehr schnell gewesen).
Teste das doch noch Mal und lösche nach jedem Test den query cache.
Sehr geehrter Herr SEO Guru, ich habe eine frage zu Ihren Backlink Tipps. Es ist nämlich nicht so einfach ein Raumschiff zu bauen um einen Backlink von der NASA zu bekommen... bitte antworten Sie auf meine Mails. Zitat von winman.de

Anzeige von ABAKUS

von Anzeige von ABAKUS »


Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

lunetics
PostRank 3
PostRank 3
Beiträge: 65
Registriert: 12.10.2004, 03:27

Beitrag von lunetics » 01.10.2009, 01:19

Durchgelesen und mal ein paar tips:

Querytests IMMER mit Select SQL_NO_CACHE * from...

Ansonsten tritt der eben genannte effekt auf (langsam - schnell - schnell).

Der Query Cache für ein Query ist nur so lange aktiv , solang keine änderungen an der Tabelle vorgenommen wurden! (d.h. SQL_NO_CACHE)
a
Brauchst also nicht wie von xAaron beschrieben jedes mal den Query cache zu löschen.


Innodb ist sinnvoll wenn es viele writes gibt.

Niemals Fulltext benutzen, wenn es ein wirklich grosses Forum ist und du eine Volltextsuche brauchst -> SOLR oder Sphinx.

Die grösste Steigerung sollte wohl z.b. memcached bringen, d.h. die Daten im objektcache (memcached) halten, sobald neuer Post -> invalidieren. Das würde auch komplett die Datenbank entlasten, da dort keine abfrage stattfindet. Eventuell eine Kombination von APC/xcache varcache (je nachdem wie dein system aufgebaut ist) und / oder memcached (falls mehrere webserver im einsatz sind)

Wobei allerdings bedacht werden soll dass memcached keine LÖSUNG zu einer schlecht designten Datenbank ist, sondern ein Optimierung für eine bereits "vernünftige" Datenbankstruktur!

Auch ist das config des Mysql servers sehr wichtig.

Mittels Maatkit solltest du z.b. herausfinden können, welche Queries genau die meiste last verursachen etc.pp.

Auf jeden fall ist das Thema Datenbankoptimierung /Queryoptimierung so komplex, dass es kaum in einen Thread passt :)

mgutt
PostRank 10
PostRank 10
Beiträge: 3206
Registriert: 08.03.2005, 13:13

Beitrag von mgutt » 01.10.2009, 07:26

lunetics hat geschrieben:Durchgelesen und mal ein paar tips:

Querytests IMMER mit Select SQL_NO_CACHE * from...
Gut, dann werde ich mein Debugging gleich um die SQL_NO_CACHE-Variante erweitern. Dann sehe ich die Zeiten für den lokalen Filecache (falls vorhanden), der DB-Abfrage, Explain und eben ohne SQL-Cache. Das sollte dann zum Vergleich genügen.

Doch was ist, wenn eine Abfrage ohne SQL-Cache langsam ist. Heißt das, dass ich da noch optimieren muss?
Innodb ist sinnvoll wenn es viele writes gibt.
Ich habe sowohl alte als auch aktuelle Lektüre studiert und auch diesen Test unter anderem gefunden:
https://www.mysqlperformanceblog.com/20 ... ks-part-1/

Früher wurde immer gesagt, dass InnoDB langsamer sei als MyISAM. Diese Aussagen wurden aber in den aktuellen Berichten revidiert. Mittlerweile empfiehlt eigentlich jeder InnoDB, auch wenn man keine Transaktionen oder Fremdschlüssel benötigt.

Ich denke ich werde daher bald auf InnoDB wechseln.
Niemals Fulltext benutzen, wenn es ein wirklich grosses Forum ist und du eine Volltextsuche brauchst -> SOLR oder Sphinx.
Aktuell ist die Volltextsuche noch recht performant. Wobei das ähnlich abläuft wie zuvor. Wenn die DB entlastet ist, dann dauert eine Volltextsuche ca. 2-3 Sekunden. Bei Auslastung kann das schon mal 30 Sekunden dauern. Aber: Ich werfe die Ergebnisse in der Regel über einen Cache aus. Das kann ich machen, weil bei mir die Sortierung priorisiert nach Genauigkeit abläuft. Dieser Cache bleibt 30 Tage lang stabil. Ich könnte vermutlich auch 90 Tage draus machen. Die User haben es bis heute nicht gemerkt. Übrigens kann ich das jedem Forumbetreiber nur empfehlen. Bei der Suche nach Genauigkeit kommen auch ältere Themen zum Vorschein, so dass doppelte Themen reduziert werden ;)

Bei Sphinx ist z.B. das ja auch der Nachteil, so viel ich weiß. Die Daten sind schnell ausgelesen, aber langsam drin. Das wäre insofern problematisch, als das die Sortierung nach Aktualität dann nicht mehr funktionieren würde (die habe auch mal gecached, da waren die Nutzer gar nicht gut drauf zu sprechen, da Ihre Kleinanzeigen im Marktplatz nicht mehr gefunden werden konnten :lol:).
Die grösste Steigerung sollte wohl z.b. memcached bringen, d.h. die Daten im objektcache (memcached) halten, sobald neuer Post -> invalidieren. Das würde auch komplett die Datenbank entlasten, da dort keine abfrage stattfindet. Eventuell eine Kombination von APC/xcache varcache (je nachdem wie dein system aufgebaut ist) und / oder memcached (falls mehrere webserver im einsatz sind)
Auf Grund der Kompatibilität wurde xCache schon vor längerer Zeit installiert. Dieser hat eine ganze Menge gebracht.

memcached kann mir insofern nicht helfen, als dass ich Ergebnisse aller Abfragen, die sich wiederholen, in einem lokalen Filecache stehen habe. Klar würde das Lesen aus dem Cache eine maginale Verbesserung herbeiführen, allerdings steigere ich damit nicht die dynamischen Query-Results, die ja im Moment die größte Last resultieren. Ich glaube eher, dass ich einen nachteiligen Effekt damit bekäme, da der Arbeitsspeicher dann wiederrum für andere Operationen fehlt.
Auch ist das config des Mysql servers sehr wichtig.
Die überlasse ich den Technikern von All-Inkl.com
Mittels Maatkit solltest du z.b. herausfinden können, welche Queries genau die meiste last verursachen etc.pp.
Aktuell kann ich nur nach Ausführungszeit gehen, da ich keinen Zugriff auf die Kommandozeile besitze. Solange ich das aber nicht ausgereizt habe, sollte das auch nicht nötig sein.
Auf jeden fall ist das Thema Datenbankoptimierung /Queryoptimierung so komplex, dass es kaum in einen Thread passt :)
Die eine oder andere Sache hat mir schon geholfen. Das Problem ist, dass wenig Seiten im Netz Schlagworte aufführen, wie sie xAaron in seinem ersten Beitrag aufgeführt hatte. Dank so einer Liste, kann man zumindest mal recherchieren, was für einen selbst sinnvoll ist.
Ich kaufe Dein Forum!
Kontaktdaten