teleport 0 Опубликовано: 4 мая 2009 Рассказать Опубликовано: 4 мая 2009 Приветствую! Собственно сабж. Нужно прикрутить кеширование к модулю Топ авторов 2.2 ( http://4dle.ru/mods/page,1,2,1147156132-top-avtorov-2.2.html ). Мод простой, но если в базе 100 000 пользаков то Core 2 Quad 2.4 ГГц практически ложится на сортировках и выборках. MySQL падает при посещаимости в 30 К в сутки Цитата Ссылка на сообщение Поделиться на других сайтах
spam 11 Опубликовано: 4 мая 2009 Рассказать Опубликовано: 4 мая 2009 (изменено) glamusers.php найти $glamusers = dle_cache("glamusers", $config['skin']); заменить на $glamusers = dle_cache("glamusers", $config['skin']); if (!$glamusers) { найти $db->free(); заменить на $db->free(); create_cache ("glamusers", $tpl->result['glamusers'], $config['skin']); } glamusers1.php найти $glamusers1 = dle_cache("glamusers1", $config['skin']); заменить на $glamusers1 = dle_cache("glamusers1", $config['skin']); if (!$glamusers1) { найти $db->free(); заменить на $db->free(); create_cache ("glamusers1", $tpl->result['glamusers1'], $config['skin']); } в index.php Вместо $tpl->set('{topusers}', $tpl->result['glamusers']); $tpl->set('{topusers1}', $tpl->result['glamusers1']); сделать $tpl->set('{topusers}', $glamusers); $tpl->set('{topusers1}', $glamusers1); p.s. не тестировал, так как этот мод не юзаю Изменено 4 мая 2009 пользователем spam Цитата Ссылка на сообщение Поделиться на других сайтах
teleport 0 Опубликовано: 4 мая 2009 Рассказать Опубликовано: 4 мая 2009 Автор 2spam Спасибо за помощь! Файл кеша в engine/cache/ но толку от него мало. Нагрузка после ваших модификаций такая же... В чем может быть причина? Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 4 мая 2009 Рассказать Опубликовано: 4 мая 2009 Вы уверены, что нагрузка именно в этом месте? Цитата Ссылка на сообщение Поделиться на других сайтах
teleport 0 Опубликовано: 4 мая 2009 Рассказать Опубликовано: 4 мая 2009 Автор 2 IT-Security: Конечно! Достаточно отключить в init.php $tpl->set('{topusers}', $glamusers); $tpl->set('{topusers1}', $glamusers1); и нагрузка стабилизируется до нормального показателя. Цитата Ссылка на сообщение Поделиться на других сайтах
spam 11 Опубликовано: 4 мая 2009 Рассказать Опубликовано: 4 мая 2009 Достаточно отключить в init.php $tpl->set('{topusers}', $glamusers); $tpl->set('{topusers1}', $glamusers1); и нагрузка стабилизируется до нормального показателя. Ерунда, как раз эти строки на нагрузку не влияют. где то ты наверно ошибся при установке/изменении модуля. Цитата Ссылка на сообщение Поделиться на других сайтах
IT-Security 33 Опубликовано: 4 мая 2009 Рассказать Опубликовано: 4 мая 2009 Именно. Эти две строчки не более чем str_replace. Цитата Ссылка на сообщение Поделиться на других сайтах
teleport 0 Опубликовано: 5 мая 2009 Рассказать Опубликовано: 5 мая 2009 (изменено) Автор Дело в том что, я сливал эти два мода - добавил в glamusers1.php: $sql = $db->query("SELECT user_id, name, foto, signature, news_num, comm_num, icq FROM ".PREFIX."_users order by news_num DESC LIMIT 0,$num"); *comm_num и после $tpl->set('{news_num}', '<a href="/user/'.$row['name'].'/news/">'.$row['news_num'].'</a>'); добавил: $tpl->set('{comm_num}', '<a href="/index.php?do=lastcomments&userid='.$row['user_id'].'">'.$row['comm_num'].'</a>'); потом в шабе модуля вывел {comm_num} и получил кол-во комментов... Этот запрос и создал нагрузку... Охото конечно слить эти два мода, чтоб в {topusers1} выводились самые активные авторы с их кол-вом комментариев. Как быть? Изменено 5 мая 2009 пользователем teleport Цитата Ссылка на сообщение Поделиться на других сайтах
romen 1 Опубликовано: 5 мая 2009 Рассказать Опубликовано: 5 мая 2009 (изменено) сделай как написал spam, включи отладку и в исходном коде посмотри сколько времени на что тратится. Изменено 5 мая 2009 пользователем romen Цитата Ссылка на сообщение Поделиться на других сайтах
spam 11 Опубликовано: 5 мая 2009 Рассказать Опубликовано: 5 мая 2009 еще после $db->free(); добавь в glamusers.php $glamusers = $tpl->result['glamusers']; в glamusers1.php $glamusers1 = $tpl->result['glamusers1']; но у тебя косяк не в этом. Дело в том что, я сливал эти два мода - добавил в glamusers1.php: выложи сюда весь код Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 036 Опубликовано: 5 мая 2009 Рассказать Опубликовано: 5 мая 2009 на поле news_num в БД нет ключей и сортирка по этому полю крайне ресурсоемкое мероприятие Цитата Ссылка на сообщение Поделиться на других сайтах
teleport 0 Опубликовано: 5 мая 2009 Рассказать Опубликовано: 5 мая 2009 Автор 2spam: Код glamusers1.php <?php /* ===================================================== Топ комментаторов v2.1 by Glam ----------------------------------------------------- Copyright (c) 2008 Glam [472-472-998] ===================================================== Данный код защищен авторскими правами ===================================================== Файл: glamusers.php ----------------------------------------------------- Назначение: Топ комментаторов ===================================================== */ if(!defined('DATALIFEENGINE')) { die("Hacking attempt!"); } $num = "10"; // сколько пользователей выводим в блоке? $glamusers1 = dle_cache("glamusers1", $config['skin']); if (!$glamusers1) { $sql = $db->query("SELECT user_id, name, foto, signature, news_num, comm_num, icq FROM ".PREFIX."_users order by news_num DESC LIMIT 0,$num"); while ($row = $db->get_row($sql)) { if ($config['allow_alt_url'] == "yes") { $userlink = "<a href=\"".$config['http_home_url']."user/".urlencode($row['name'])."/\">"; } else { $userlink = "<a href=\"$PHP_SELF?subaction=userinfo&user=".urlencode($row['name'])."/\">"; } if ($row['foto'] !== "") $ava = "{$userlink}<img src=\"".$config['http_home_url']."uploads/fotos/".$row['foto']."\" align=\"center\" width=\"50\"></a>"; else $ava = "{$userlink}<img src=\"{THEME}/images/noavatar.png\" align=\"center\" width=\"50\"></a>"; $nohtml = "'<[\/\!]*?[^<>]*?>'si"; $tpl->load_template('topusers1.tpl'); $tpl->set('{ava}', $ava); $tpl->set('{nickname}', $userlink.$row['name'].'</a>'); $tpl->set('{signature}', preg_replace($nohtml,"",stripslashes($row['signature']))); $tpl->set('{icq}', $row['icq']); $tpl->set('{news_num}', '<a href="/user/'.$row['name'].'/news/">'.$row['news_num'].'</a>'); $tpl->set('{comm_num}', '<a href="/index.php?do=lastcomments&userid='.$row['user_id'].'">'.$row['comm_num'].'</a>'); $tpl->set('{blog_num}', '<a href="/user/'.$row['name'].'/news/">Мой блог на этом сайте</a>'); $tpl->compile('glamusers1'); $tpl->clear(); } $db->free(); create_cache ("glamusers1", $tpl->result['glamusers1'], $config['skin']); } ?> на поле news_num в БД нет ключей и сортирка по этому полю крайне ресурсоемкое мероприятие и наверное на comm_num тоже нет ? Цитата Ссылка на сообщение Поделиться на других сайтах
spam 11 Опубликовано: 5 мая 2009 Рассказать Опубликовано: 5 мая 2009 (изменено) 2spam: Код glamusers1.php Все там верно, не должно быть лишних запросов, кэш стоит правильно, если есть лишний запрос к БД то он не от этого файла. и наверное на comm_num тоже нет ? Нет. Изменено 5 мая 2009 пользователем spam Цитата Ссылка на сообщение Поделиться на других сайтах
teleport 0 Опубликовано: 6 мая 2009 Рассказать Опубликовано: 6 мая 2009 Автор Если убрать из запроса: $sql = $db->query("SELECT user_id, name, foto, signature, news_num, comm_num, icq FROM ".PREFIX."_users order by news_num DESC LIMIT 0,$num"); comm_num то нагрузка исчезает. Цитата Ссылка на сообщение Поделиться на других сайтах
romen 1 Опубликовано: 6 мая 2009 Рассказать Опубликовано: 6 мая 2009 ну добавь индекс на поле. правда немного уменьшится производительность системы, потому что при каждом изменении данных полей индекс будет перестраиваться.... Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.