Seite 1 von 3
Mysql Profis on Board?
Verfasst: Fr 16. Nov 2012, 15:15
von Flori
Gibts hier den ein oder anderen Mysql Profi?
Diese Abfrage scheint extrem langsam abzulaufen (>3s)
Code: Alles auswählen
SELECT f.*, t.topic_title, t.topic_id, t.topic_moved_id,
t.topic_last_post_id FROM (phpbb3_forums f) LEFT JOIN phpbb3_topics t ON
(f.forum_last_post_id = t.topic_last_post_id) ORDER BY f.left_id;
gehört nach googelei wohl zu dem Mod "NV advanced last topic titles"
(also die Überschriften der letzten Beiträge in der Forumsübersicht)
Gestern hab ich ansich die letzte Version eingespielt, aber die Verbesserung ist eher gering.
Jemand eine Idee, wie man das weiter optimieren kann?
Schubbi?
Gruß Flo
Re: Mysql Profis on Board?
Verfasst: Fr 16. Nov 2012, 15:39
von Zylinderkopf
Hi,
sind die spalten forum_last_post_id, topic_last_post_id und left_id indiziert?
Zylinderkopf
Re: Mysql Profis on Board?
Verfasst: Fr 16. Nov 2012, 16:01
von Flori
Was heißt denn das und wie stell ich das fest?
Re: Mysql Profis on Board?
Verfasst: Fr 16. Nov 2012, 16:07
von gmu
Kannst Du die Abfrage bearbeiten?
Dann mach mal das SELECT mit "LIMIT 20".
Da kannst Du die Ergebnismenge auf die ersten 20 Treffer reduzieren.
Code: Alles auswählen
SELECT f.*, t.topic_title, t.topic_id, t.topic_moved_id, t.topic_last_post_id
FROM (phpbb3_forums f) LEFT JOIN phpbb3_topics t ON (f.forum_last_post_id = t.topic_last_post_id) ORDER BY f.left_id
LIMIT 20;
gmu
Re: Mysql Profis on Board?
Verfasst: Fr 16. Nov 2012, 16:10
von gmu
Flori hat geschrieben:Was heißt denn das und wie stell ich das fest?
Bsp:
Code: Alles auswählen
SHOW KEYS FROM phpbb3_forums;
SHOW KEYS FROM phpbb3_topics;
Re: Mysql Profis on Board?
Verfasst: Fr 16. Nov 2012, 16:17
von Zylinderkopf
Ein Index ist eine "Vor-Sortierung" und beschleunigt das Abfragen:
http://dev.mysql.com/doc/refman/5.1/de/ ... dexes.html
Einfach erklärt: Man muss nicht jedesmal beim Abfragen sortieren/indizieren, sondern die Sortierung wird einem beim Abspeichern erstellt und bleibt dann erhalten. Manchmal hilft es, den Index neu anzulegen, hier aber eher nicht, tippe ich.
Wenn du das standardmäßige phpbb-Datenbankdesign verwendest, dann ist das aber sicher richtig eingestellt.
Ist deine Abfrage nicht überhaupt etwas umständlich formuliert, wie wäre es etwa so:
Code: Alles auswählen
SELECT f.*, t.topic_title, t.topic_id, t.topic_moved_id,
t.topic_last_post_id FROM f, t WHERE f.forum_last_post_id = t.topic_last_post_id ORDER BY f.left_id;
gmu's "LIMIT 20" ist auch ein heißer Tipp, denn deine Abfrage liefert eine riesige Ergebnismenge.
Zylinderkopf
Re: Mysql Profis on Board?
Verfasst: Fr 16. Nov 2012, 18:07
von Flori
Ich hab den Mod eigentlich einfach so übernommen,
wie es in der Anleitung steht.
Der obige Skriptauszug ist mir vom Provider mitgeteilt worden, dass
dieser überarbeitet werden sollte.
Ich muss den erstmal finden.
Das mit dem Limit hört sich gut an.
Abfragen kann ich bearbeiten, müsste doch in irgendeinem php file stehen, oder?
Die obigen Befehle kann ich z. B. bei mysqldumper ausführen, oder?
Re: Mysql Profis on Board?
Verfasst: Fr 16. Nov 2012, 18:23
von Schubidubidu †
Einen Index zu erstellen bringt aber nur etwas für Spalten, wo auch Dubletten drin sind, ansonsten wird es eher sogar noch langsamer.
Weiterhin kannst Du mit EXPLAIN SELECT .... die Abfrage auf VORHER -NACHER durchtesten ob das Indexieren etwas gebracht hat.
siehe hier :
http://dev.mysql.com/doc/refman/5.1/de/explain.html
Dann habe ich im dem Error Stack des "General Error" etwas von MYSQL 4 gelesen.
Daher würde ich DRINGEND anraten auf MYSQL 5 zu wechseln.
Sollte die Datenbank noch MyISAM-Storages besitzen (denke ich mal) umsetzen auf InnoDB.
siehr z.B. hier:
http://www.golem.de/1009/78067.html
Gruß
Nachtrag: LIMIT <Zahl> bringts natürlich in jedem Fall... ob 20 oder 100 oder was auch immer.
Auf jeden Fall ist das LIMIT schon mal ein echter Speichersparer, da das volle Pfund ansonsten von jedermann den Server vollpumpt um es danach vom PHP doch nur auf diese Anzahl zu begrenzen.
Also alles was die Datenbank schon selbst begrenzen kann, sollte sie auch schon tun. Das ich in jedem Falle wirksam.
Re: Mysql Profis on Board?
Verfasst: Fr 16. Nov 2012, 18:30
von Flori
Die Datenbank sitzt auf mysql5
nur taucht immer bei Infos (auch updates) mysql4 auf.
Keine Ahnung, wo diese Info steht und ausgegeben wird.
Früher war es mal eine mysql4 Datenbank.
Wie stell ich das auf InnoDB um?
Hat das nicht nachwirkungen, wenn ich mal wieder ein Update machen möchte?
Sorry, wenn ich doof frage, aber ist für mich vieles immer noch Neuland.
Re: Mysql Profis on Board?
Verfasst: Fr 16. Nov 2012, 18:42
von Schubidubidu †
Erst nochmal das hier:
Dieser Kommandozeilenbefehl optimiert (und repariert) alle InnoDB Tabellen aller laufenden Datenbanken.
Ist ungefähr vergleichbar mit der Defragmentierung von Festplatten.
Am besten regelmäßig (z.B. morgens um 03:33 Uhr) per crontab starten, dann sind die Tabellen immer "fit" für den nächsten Tag.
Ich weiß ja nicht, ob du auf deinem Server dort an diesen Befehl rankommst.
Falls nicht, such ich dir das mal in Form eines PHP-Scripts raus, diese Codeschnipsel liegen überall im Web rum.
Ach so: Im "phpmyadmin" kannst Du da sehen, welche Storage-Typ die Tabellen haben.
Re: Mysql Profis on Board?
Verfasst: Fr 16. Nov 2012, 18:48
von Flori
optimiert oder repariert hab ich über phpadmin schon.
Befehle kann ich damit denke ich auch problemlos ausführen.
Hab noch die MyISAM Tabs.
Gruss Flo
P.S. Draf ich im Betrieb optimieren?
Re: Mysql Profis on Board?
Verfasst: Fr 16. Nov 2012, 18:56
von Schubidubidu †
Flori hat geschrieben:Hab noch die MyISAM Tabs.
Na dann.... ist doch da noch zu erwartendes Potenzial drin.
Howto:
http://dev.mysql.com/doc/refman/5.1/de/ ... nnodb.html
Hinweis:
Ich weiß ja nicht wie dein Ding da ausgestattet ist, aber InnoDB braucht etwas mehr RAM (ich glaube rund 100MB insgesamt).
Normalerweise sollte das aber heutzutage kein Thema sein.
Ohnehin erstmal an einer Demodatenbank testen und nicht auf dem heißen System, aber ich denke das ist ohnehin klar.
Flori hat geschrieben:P.S. Draf ich im Betrieb optimieren?
Ja
Re: Mysql Profis on Board?
Verfasst: Fr 16. Nov 2012, 19:22
von gmu
Prüf doch mal das Plugin oder was das ist, dass die aktuellen Beiträge anzeigt.
Ggf. kann man da bei den Einstellungen ein Limit angeben, dann muß man nicht im PHP rumwursteln.
Aktuell werden hier 1960 Seiten mit jeweils 10 Einträgen angeboten.
Das bedeutet, der MySQL-Server liefert 19.600 Posts komplett (inkl. Postingtext) nur für den einen Block "Aktuelle Beiträge".
@Schubi: Ein Index ist nicht nur für Dubletten.
Den Index braucht man schon um beschleunigt Datensätze zu finden, oder wie in dem SELECT-Statement die zugehörigen verknüpften
Datensätze, die ja über Schlüsselfelder verknüpft (relational) sind.
gmu
Re: Mysql Profis on Board?
Verfasst: Fr 16. Nov 2012, 19:28
von Flori
Hab ich mal deaktiviert.
Also nur noch 10 Beiträge auf einer Seite.
Re: Mysql Profis on Board?
Verfasst: Fr 16. Nov 2012, 19:40
von Schubidubidu †
gmu hat geschrieben:@Schubi: Ein Index ist nicht nur für Dubletten.
Den Index braucht man schon um beschleunigt Datensätze zu finden, oder wie in dem SELECT-Statement die zugehörigen verknüpften
Datensätze, die ja über Schlüsselfelder verknüpft (relational) sind.
Schon klar.
"Dubletten" war ein Versuch das möglichst einfach auszudrücken.
Ich meine damit, dass es nur Sinn macht, wenn in Tabellen ohnehin eindeutige Daten stehen (also keine doppelten Einträge), dann muss das RDBMS so oder so voll sequeziell durch, da hilft auch kein Index. Ansonsten würde jedes Datenbank System von Haus aus alles durch"indexen", wenn viel immer viel helfen würde.
Weitere Indexe (außer Primary, Foreign und den Unique Keys) zu platzieren muss schon etwas geplant werden.
Ich höre viel zu oft: "Datenbank langsam, mach'n Index drauf"... so einfach ist das nicht, da schreiben mache sogar Doktorarbeiten drüber.
Aber in der Regel kommt man mit dem oben erwähnten EXPLAIN SELECT... sehr schnell dahinter, ob der gesetzte Index sinnvoll ist.
Falls nicht, wieder ab in die Tonne damit, ist ja kein Problem.
Siehe z.B auch
http://phpperformance.de/indizes-richtig-einsetzen/#p8