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. не тестировал, так как этот мод не юзаю Ссылка на сообщение Поделиться на других сайтах
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} выводились самые активные авторы с их кол-вом комментариев. Как быть? Ссылка на сообщение Поделиться на других сайтах
romen 1 Опубликовано: 5 мая 2009 Рассказать Опубликовано: 5 мая 2009 сделай как написал spam, включи отладку и в исходном коде посмотри сколько времени на что тратится. Ссылка на сообщение Поделиться на других сайтах
spam 11 Опубликовано: 5 мая 2009 Рассказать Опубликовано: 5 мая 2009 еще после $db->free(); добавь в glamusers.php $glamusers = $tpl->result['glamusers']; в glamusers1.php $glamusers1 = $tpl->result['glamusers1']; но у тебя косяк не в этом. Дело в том что, я сливал эти два мода - добавил в glamusers1.php: выложи сюда весь код Ссылка на сообщение Поделиться на других сайтах
celsoft 6255 Опубликовано: 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 тоже нет ? Нет. Ссылка на сообщение Поделиться на других сайтах
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 ну добавь индекс на поле. правда немного уменьшится производительность системы, потому что при каждом изменении данных полей индекс будет перестраиваться.... Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Архивировано
Эта тема находится в архиве и закрыта для публикации сообщений.