Beiträge: 32
Themen: 7
Registriert seit: 25.11.2016
Hallo leute,
habe ein Forum mit 120.000 Beiträgen, 50.000 Usern und habe schon seit einer Weile enorme Performance probleme, erst dachte ich, es liegt an der Ajax Shoutbox, die ich dann auch eingegrenzt hatte, aber dann gab es ein weiteres Problem, worum ich mich jetzt erst drum kümmern konnte, obwohl es schon eine weile present ist.
Vorab, an der Serverleistung liegt es definitiv nicht
Es gibt eine Query, die extrem langsam durchgeführt wird, und zwar geht es um threads table, soweit ich sehen konnte (bitte korrigiert mich, wenn ich falsch liege). Habe mal eine Screenshot angehangen.
Habe auch schon einiges gelesen und bin auf einen Beitrag von MyBB.com gestoßen, der ein eventuell ähnliches Problem hatte, nur ist der Beitrag von 2006. https://community.mybb.com/archive/index...10962.html
Wäre toll, wenn Ihr helfen könntet, danke
Beiträge: 2.318
Themen: 13
Registriert seit: 09.11.2008
Hast du irgendein Plugin auf der Indexseite, das ungelesene Threads anzeigen soll?
Beiträge: 32
Themen: 7
Registriert seit: 25.11.2016
30.05.2018, 08:39
(Dieser Beitrag wurde zuletzt bearbeitet: 30.05.2018, 08:40 von Assassin286.)
Die einzigen Plugins, die direkt die Startseite betreffen sind: ProStats, die Shoutbox (an der liegt es aber nicht), sidebars plugin und das war es auch schon. Habe auch Xthreads installiert, wegen einer Coveranzeige aber die sind nicht auf der Startseite zu sehen.
Nutze das Theme iGame von iAndrew
Beiträge: 2.318
Themen: 13
Registriert seit: 09.11.2008
30.05.2018, 10:15
(Dieser Beitrag wurde zuletzt bearbeitet: 30.05.2018, 10:16 von frostschutz.)
Okay, das von dir gezeigte Query stammt aus prostats.php
PHP-Code: $query = $db->query (" SELECT t.subject,t.username,t.uid,t.tid,t.fid,t.lastpost,t.lastposter,t.lastposteruid,t.replies,t.visible,tr.uid AS truid,tr.dateline,tp.displaystyle AS styledprefix,f.name FROM ".TABLE_PREFIX."threads t LEFT JOIN ".TABLE_PREFIX."threadsread tr ON (tr.tid=t.tid AND tr.uid='".$mybb->user['uid']."') LEFT JOIN ".TABLE_PREFIX."threadprefixes tp ON (tp.pid = t.prefix) LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid = t.fid) WHERE (t.visible = '1' ".$vcheck.") ".$unviewables['string']." AND t.closed NOT LIKE 'moved|%' AND t.visible != '-2' AND f.active = '1' ORDER BY t.lastpost DESC LIMIT 0,".$NumOfRows);
Allerdings kann ich das bei mir ausführen und das Query ist gar nicht langsam. Mein explain sieht da aber auch anders aus, einfache simple lookups, bei dir irgendwie ein full search.
Wie sieht denn die Struktur deiner forums Tabelle aus?
Beiträge: 32
Themen: 7
Registriert seit: 25.11.2016
30.05.2018, 10:34
(Dieser Beitrag wurde zuletzt bearbeitet: 30.05.2018, 10:35 von Assassin286.)
Das es an Prostats liegt, hätte ich ehrlich gesagt nicht vermutet. Ich werde, wenn ich von Arbeit wieder da bin mal prostats zeitweise ausstellen. Und mal schauen.
Welche Foren Tabelle meinst du denn ?
Beiträge: 2.318
Themen: 13
Registriert seit: 09.11.2008
30.05.2018, 11:39
(Dieser Beitrag wurde zuletzt bearbeitet: 30.05.2018, 11:46 von frostschutz.)
gibt nur die eine ;=) TABLE_PREFIX."forums f
in phpmyadmin (oder adminer oder was immer du benutzt für deine datenbank) mal auf struktur gehen, liste der felder und indizes und welche engine und so zeugs...
Deinem Explain zufolge wird auf die forums Tabelle ein full search gemacht sogar mit temporary und pipapoh, ich sehe an dem query nur nicht wozu das nötig sein sollte und bei mir ist das auch nicht so
Es wird f.active abgefragt vielleicht bringt da ein Index auf active was. Ansonsten natürlich f.fid aber das sollte eh der primary key sein.
Was normalerweise eher stört ist das LIKE "moved|%", Stringvergleiche im Query sind doof, aber da hab ich im Bugtracker von MyBB einen Eintrag gesehen, daß man diese Struktur ändern will. Möglicherweise würde es aber auch reichen diese Bedingung zu invertieren (t.closed IN (0,1,2,3)) was immer da die gültigen numerischen Werte sind, falls moved| der einzige nicht-numerische Wert ist. Hmmm. Egal.
Beiträge: 32
Themen: 7
Registriert seit: 25.11.2016
30.05.2018, 13:40
(Dieser Beitrag wurde zuletzt bearbeitet: 30.05.2018, 13:43 von Assassin286.)
Achso, du meinst die "forums" tabelle, war mit dem Begriff Tabelle gerade nicht "im reinen" weil ich immer table sage, also englisch halt .
Die Engine ist aktuell MyISAM, hatte zwischenzeitlich auch mal auf InnoDB gewechselt. Ich hoffe das ich das, was du sehen wolltest. Weiter unten ist dann noch das xthreads zeug, das habe ich dann weggelassen, weils uninteressant dafür ist.
Desweiteren habe ich mal ein anderes Plugin für Stats ausprobiert, das selbe Problem nur etwas kompakter
Ich probiere mal einen index auf active zu machen
Beiträge: 32
Themen: 7
Registriert seit: 25.11.2016
07.06.2018, 20:29
(Dieser Beitrag wurde zuletzt bearbeitet: 07.06.2018, 20:52 von Assassin286.)
Selbst ein Index auf active bringt kaum was, eine leichte verbesserung gibt es, aber nicht wirklich viel.
|