MobyThreads verbraucht Unmengen an SQL-Queries...
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
-
schmidtedv
- Beiträge: 607
- Registriert: So 13.Feb, 2005 10:46
- Wohnort: St. Blasien (seit 01.06)
- Kontaktdaten:
MobyThreads verbraucht Unmengen an SQL-Queries...
Ich hätte die Bitte, ob einer mal in die Datei einen kontrollierenden Blick werfen könnte. Der MOd ist wirklich schön aber hat das Problem, das bei der Erzeugung der Forenansicht Unmengen an SQL-Queries verursacht werden....an diesem Punkt angesetzt wäre meine Frage, ob jemandem vielleicht im Text eine mögliche Optimierung auffällt die ohne große Probleme zu ändern wäre :-)
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- oxpus
- Administrator
- Beiträge: 28735
- Registriert: Mo 27.Jan, 2003 22:13
- Wohnort: Bad Wildungen
- Kontaktdaten:
Hm, der MOD fügt in der Schleife der Foren jeweils 3 Abfragen durch, um die andere Art der Darstellung zu berechnen.
Das wäre nicht ganz so trivial, hier die Darstellungsform erst zu wählen und dann durch die Foren zu wandern.
Dazu müsste man den MOD erstmal einbauen und analysieren, was der genau treibt und wie man die Abfragen zentraler gestalten könnte...
Das wäre nicht ganz so trivial, hier die Darstellungsform erst zu wählen und dann durch die Foren zu wandern.
Dazu müsste man den MOD erstmal einbauen und analysieren, was der genau treibt und wie man die Abfragen zentraler gestalten könnte...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-
schmidtedv
- Beiträge: 607
- Registriert: So 13.Feb, 2005 10:46
- Wohnort: St. Blasien (seit 01.06)
- Kontaktdaten:
- oxpus
- Administrator
- Beiträge: 28735
- Registriert: Mo 27.Jan, 2003 22:13
- Wohnort: Bad Wildungen
- Kontaktdaten:
Ach ja, die Foren selber, also auf dem Index, und in den Foren sind viele Abfragen vorhanden.
Liegt wie gesagt in der Natur des MODs.
Da müsste ich mal eine Menge Zeit haben, und hätte den dann auch schneller selber programmiert.....
Liegt wie gesagt in der Natur des MODs.
Da müsste ich mal eine Menge Zeit haben, und hätte den dann auch schneller selber programmiert.....
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-
schmidtedv
- Beiträge: 607
- Registriert: So 13.Feb, 2005 10:46
- Wohnort: St. Blasien (seit 01.06)
- Kontaktdaten:
...also attachment-bilder hab ich jetzt drin und ein bis 2 extra-abfragen konnte ich rausschmeißen...aber ich nehme an, wenn er z.B. aus dem posts-table statt p.* nur die benötigten P.xyz saugt, bringt das noch nicht viel, da die sql-abfragen gleich bleiben, gelle?
Das Problem liegt whl zum Hauptteil in der doppelten Abfrage in der viewforum.php:
Kann man da was verbessern...oder geht das wegen der unterschiedlichen kriterien nicht?
Denkansatz:
Oder könnte man die Abfrage nicht einmal in der functions.php in dem thread-block zur verfügung stellen?, also hier irgendwie reinbauen:
Das Problem liegt whl zum Hauptteil in der doppelten Abfrage in der viewforum.php:
Code: Alles auswählen
if ($display_style != 0) {
$sql = "SELECT u.username, u.user_id, p.post_id, p.topic_id, p.parent_id, p.forum_id, p.poster_id, p.post_time, p.post_attachment, pt.post_subject, t.topic_id, t.topic_type, t.forum_id, t.topic_vote
FROM " . POSTS_TABLE . " p, " . USERS_TABLE . " u, " . POSTS_TEXT_TABLE . " pt, " . TOPICS_TABLE . " t
WHERE p.forum_id = $forum_id
AND u.user_id = p.poster_id
AND pt.post_id = p.post_id
AND t.topic_id = p.topic_id
AND t.topic_type = 2
ORDER BY p.parent_id, t.topic_type DESC, t.topic_id DESC, p.post_time ASC";
if (!($result = $db->sql_query($sql))) {
message_die(GENERAL_ERROR, "Couldn't obtain post/user information.", "", __LINE__, __FILE__, $sql);
}
if ($row = $db->sql_fetchrow($result)) {
$threadrow = array();
do {
$threadrow[] = $row;
} while ($row = $db->sql_fetchrow($result));
$db->sql_freeresult($result);
} else {
$threadrow = array();
}
$sql = "SELECT t.topic_id, t.topic_moved_id
FROM " . TOPICS_TABLE . " t
WHERE t.forum_id = $forum_id
AND t.topic_type < 2
ORDER BY t.topic_type DESC, t.topic_last_post_id DESC
LIMIT $start, " . $board_config['topics_per_page'];
if (!($result = $db->sql_query($sql))) {
message_die(GENERAL_ERROR, "Couldn't obtain post/user information.", "", __LINE__, __FILE__, $sql);
}
$per_page_offset = 0;
if ($row = $db->sql_fetchrow($result)) {
$thread_t = array();
do {
$thread_t[] = $row;
if ($row["topic_moved_id"] < 1) {
$thread_id_pp_sql = $thread_id_pp_sql . " OR p.topic_id = '" . $row["topic_id"] . "'";
} else {
$thread_id_pp_sql = $thread_id_pp_sql . " OR p.topic_id = '" . $row["topic_moved_id"] . "'";
}
$per_page_offset += $row["topic_replies"];
} while ($row = $db->sql_fetchrow($result));
$db->sql_freeresult($result);
$thread_id_pp_sql = substr($thread_id_pp_sql, 4);
$thread_id_pp_sql = "AND (" . $thread_id_pp_sql . ")";
$per_page_offset += count($thread_t);
} else {
$thread_id_pp_sql = "AND p.forum_id = $forum_id";
}
$sql = "SELECT u.username, u.user_id, p.post_id, p.topic_id, p.parent_id, p.forum_id, p.poster_id, p.post_time, p.post_attachment, pt.post_subject, t.topic_id, t.topic_type, t.topic_last_post_id, t.forum_id, t.topic_vote
FROM " . POSTS_TABLE . " p, " . USERS_TABLE . " u, " . POSTS_TEXT_TABLE . " pt, " . TOPICS_TABLE . " t
WHERE u.user_id = p.poster_id
AND pt.post_id = p.post_id
AND t.topic_id = p.topic_id
AND t.topic_type < 2
$thread_id_pp_sql
ORDER BY p.parent_id, t.topic_type DESC, t.topic_last_post_id DESC, p.post_id ASC";
Denkansatz:
Oder könnte man die Abfrage nicht einmal in der functions.php in dem thread-block zur verfügung stellen?, also hier irgendwie reinbauen:
Code: Alles auswählen
function show_thread(&$head_post, &$children, &$post_id, $level, &$template, &$topic_id, &$userdata, $topic_last_read, $forum_id = 0)
{
global $images, $lang, $board_config, $theme, $phpEx;
$poster_id = $head_post['user_id'];
$post_date = create_date($board_config['default_dateformat'], $head_post['post_time'], $board_config['board_timezone']);
$poster = ($poster_id == ANONYMOUS) ? (($head_post['post_username'] != '') ? $head_post['post_username'] . ' ' : $lang['Guest'] . ' ') : '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . '=' . $poster_id) . '">' . $head_post['username'] . '</a>';
if ($userdata['session_logged_in'] && $head_post['post_time'] > $userdata['user_lastvisit'] && $head_post['post_time'] > $topic_last_read) {
if ($level == 0) {
$mini_post_img = $images['icon_newest_reply'];
} else {
$mini_post_img = $images['icon_minipost_new'];
}
$mini_post_alt = $lang['New_post'];
} else {
if ($level == 0) {
$mini_post_img = $images['icon_latest_reply'];
} else {
$mini_post_img = $images['icon_minipost'];
}
$mini_post_alt = $lang['Post'];
}
$mini_post_url = append_sid("viewtopic.$phpEx?" . POST_POST_URL . '=' . $head_post['post_id']) . '#' . $head_post['post_id'];
$post_subject = ($head_post['post_subject'] != '') ? $head_post['post_subject'] : '';
$post_prefix = '';
for ($k = 0; ($k < $level) && ($k < 25); $k++) {
if ($level == 0) {
$post_prefix = ' ' . $post_prefix;
} else {
$post_prefix = ' ' . $post_prefix;
}
}
$row_color = (!($i % 2)) ? $theme['td_color1'] : $theme['td_color2'];
$row_class = (!($i % 2)) ? $theme['td_class1'] : $theme['td_class2'];
$row_id = $head_post['post_id'];
if (count($head_post) > 0) {
$post_subject = (($post_id == $row_id)) ? '<b>' . $post_subject . '</b>' : '<a href="' . append_sid("viewtopic.$phpEx?topic_view=threads" . "&p=$row_id&" . POST_TOPIC_URL . "=" . $head_post['topic_id']) . '">' . $post_subject . '</a>';
if ($level == 0) {
$post_subject = "<span class=\"topictitle\">" . $post_subject . "</span>";
}
if ($level == 0 && $head_post['topic_vote'] > 0) {
$post_subject = $lang['Topic_Poll'] . " " . $post_subject;
}
if ($level == 0 && $head_post['forum_id'] != $forum_id) {
$post_subject = $lang['Topic_Moved'] . " " . $post_subject;
}
if ($level == 0 && $head_post['topic_type'] > 0) {
$post_subject = ($head_post['topic_type'] == 1) ? $lang['Topic_Sticky'] . " " . $post_subject : $lang['Topic_Announcement'] . " " . $post_subject;
}
$template->assign_block_vars('threadrow', array('ROW_COLOR' => '#' . $row_color,
'ROW_CLASS' => $row_class,
'POSTER_NAME' => $poster,
'POST_DATE' => $post_date,
'POST_SUBJECT' => $post_subject,
'POST_PREFIX' => $post_prefix,
'POST_ATTACHMENT_IMG' => topic_attachment_image($head_post['post_attachment']),
'MINI_POST_IMG' => $mini_post_img,
'L_MINI_POST_ALT' => $mini_post_alt,
'U_POST_ID' => $row_id,
'TOPIC_ID' => $head_post['topic_id']
)
);
$size = count($children[$row_id]);
for ($m = 0; $m < $size; $m++) {
show_thread($children[$row_id][$m], $children, $post_id, $level + 1, $template, $topic_id, $userdata, $topic_last_read);
}
}
return;
}
Zuletzt geändert von schmidtedv am Do 02.Nov, 2006 21:52, insgesamt 2-mal geändert.
- oxpus
- Administrator
- Beiträge: 28735
- Registriert: Mo 27.Jan, 2003 22:13
- Wohnort: Bad Wildungen
- Kontaktdaten:
Du hast es scheinbar nicht ganz verstanden:
In der Forenansicht werden alle Inhalte (also die Topics) einmal im phpBB abgefragt und dann mit einer Schleife aufbereitet, bzw. an das Template zur Darstellung übergeben.
Also 1 Query je Forum-Seite (jetzt ohne mal alles andere "drumherum").
Der Moby MOD fügt nun aber genau in diese Schleife, in der im Original "nur" per PHP Daten bearbeitet werden, neue SQL-Queries ein, so daß je Topic 3 neue SQL-Queries hinzukommen. Also Anzahl Topics * 3 je Forumseite...
Und genau hier müsste man ansetzen, in dem man die zusätzlichen Queries für alle Topics einmal durchführt und dann in der Original-Schleife für die Topics diese dann verwendet.
Dafür brauchts aber Zeit, um den MOD zum einen zu verstehen und zum anderen den "Umbau" zu bewerkstelligen.
Sofern das überhaupt möglich ist.....
In der Forenansicht werden alle Inhalte (also die Topics) einmal im phpBB abgefragt und dann mit einer Schleife aufbereitet, bzw. an das Template zur Darstellung übergeben.
Also 1 Query je Forum-Seite (jetzt ohne mal alles andere "drumherum").
Der Moby MOD fügt nun aber genau in diese Schleife, in der im Original "nur" per PHP Daten bearbeitet werden, neue SQL-Queries ein, so daß je Topic 3 neue SQL-Queries hinzukommen. Also Anzahl Topics * 3 je Forumseite...
Und genau hier müsste man ansetzen, in dem man die zusätzlichen Queries für alle Topics einmal durchführt und dann in der Original-Schleife für die Topics diese dann verwendet.
Dafür brauchts aber Zeit, um den MOD zum einen zu verstehen und zum anderen den "Umbau" zu bewerkstelligen.
Sofern das überhaupt möglich ist.....
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-
schmidtedv
- Beiträge: 607
- Registriert: So 13.Feb, 2005 10:46
- Wohnort: St. Blasien (seit 01.06)
- Kontaktdaten:
- oxpus
- Administrator
- Beiträge: 28735
- Registriert: Mo 27.Jan, 2003 22:13
- Wohnort: Bad Wildungen
- Kontaktdaten:
Ja genau das. Also ohne eine Optimierung...kann man also sagen, je größer das board, desto "gefährlicher der MOD
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-
schmidtedv
- Beiträge: 607
- Registriert: So 13.Feb, 2005 10:46
- Wohnort: St. Blasien (seit 01.06)
- Kontaktdaten:
- oxpus
- Administrator
- Beiträge: 28735
- Registriert: Mo 27.Jan, 2003 22:13
- Wohnort: Bad Wildungen
- Kontaktdaten:
Hilft aber auch nur solange, wie auch eine begrenzt Anzahl User immer das Board besuchen.
Denn auch die erzeugen dann ja Queries und je mehr, desto mehr User auf dem Board sind...
Denn auch die erzeugen dann ja Queries und je mehr, desto mehr User auf dem Board sind...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-
schmidtedv
- Beiträge: 607
- Registriert: So 13.Feb, 2005 10:46
- Wohnort: St. Blasien (seit 01.06)
- Kontaktdaten:
ja....vielleicht (sturer bock ich :-) ) bau ich dann noch n acp-ativierungsoption ein, der die user alle umstellt auf "normal" und zudem den "erweiterte ansicht" button ausblendet (falls halt notwendig)
Der MOD ist halt mit eins der Hauptgimmicks in meinem Projekt und ihn da einfach rauszuschneiden wäre zwar konsequent, täte mir aber in der Seele weh bei all den Änderungen, die ich für ihn machen mußte (auch an Standardfunktionenund Erweiterungen)
Der MOD ist halt mit eins der Hauptgimmicks in meinem Projekt und ihn da einfach rauszuschneiden wäre zwar konsequent, täte mir aber in der Seele weh bei all den Änderungen, die ich für ihn machen mußte (auch an Standardfunktionenund Erweiterungen)