Ускорение форума phpBB при помощи memcached
Дата: Сентябрь 30th, 2008 Автор: EugeneVC
Давно читал о проекте . Но руки все не доходили попробовать и вот.
Итак имеем phpBB форум, который ужасно тормозит. А тормозит он бедняжка из-за базы mysql, которая не справляется с потоком SQL запросов. Но - в любом проекте есть такие SQL запросы, которые повторяются многократно, например, это запросы статистики. И бедняжка mysql загружен этими повторяющимися запросами. Вы скажите у mysql есть кеш - кеш то есть, только он не знает что данные не изменились и выполняет запрос снова. Ведь только мы знаем, что данные для некоторых запросов еще не изменятся часа 2.
Устанавливаем memcached под Debian или Ubunta.
apt-get install memcached php5-memcached
После установки не забываем перезагрузить apache или php-cgi. Что бы php увидел новые модули.
Включаем( если уже не включен) лог медленных запросов у mysql.
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 3
и ждем с часик - пьем кофе и смотрим фильм. После просмотра любимого фильма смотрим что-же туда накапало. Если у вас там пусто - можно вас поздравить - вам еще не нужна оптимизация. У меня туда накапало порядка 4000 запросов - из них легко было выделить запросы типа :
SELECT_COUNT(user_id)_AS_total_____FROM_phpbb_users_____WHERE_user_id_<>_-1
Запрос постоянно подсчитывал количество пользователей форума на phpBB. Понятно, что это число не особо важно - это просто статистика. Значит данные по этому запросу можно закешировать часика на 2.
Для этого открываем файл includes/functions.php ищем функцию get_db_stat() - в ней лежат наши жирные запросики.
находим код:
if ( !($result = $db->sql_query($sql)) )
{
return false;
}
$row = $db->sql_fetchrow($result);
изменяем на
$memcached = new Memcache;
$memcached->connect('localhost', 11211);
if(!$row = $memcached->get($sql))
{
if ( !($result = $db->sql_query($sql)) )
{
return false;
}
$row = $db->sql_fetchrow($result);
$memcached->set($sql, $row, MEMCACHE_COMPRESSED, time() + 7200);
}
$memcached->close();
Смысл изменения состоит в том, что в memcached данные хранятся парами (ключ, значение). Ключём служит SQL запрос - он уникальный. Алгоритм приведенного кода состоит в следующем:
соединяемся с memcached, смотрим если такие данные по ключу, если нет только тогда дергаем базу, если есть - то идем дальше - не посылая на базу никаких запросов. Надеюсь экономия всем понятна.
Немного о грустном - модов для phpBB + memcache я не нашел. Зато в phpbb3 эта поддержка заявлена. А для phpBB2 придется самому выискивать такие запросики для кеширования, а ведь еще есть моды - они тоже генерят запросики. Если все сделать правильно - тормоза базы можно сократить в 2-3 раза.
Популярность: -27%
Категория: Базы данных |
Похожие статьи:
- Тюнинг nginx, mysql, php на VPS.
- Интересный robots.txt для WP
- Настройка awstats, nginx и logrotate
- Раскрутка блога через блоги
- Установка php framework Kohana
Октябрь 4th, 2008 - 10:25 пп
Ускорение форума phpBB при помощи memcached…
Итак имеем phpBB форум, который ужасно тормозит. А тормозит он бедняжка из-за базы mysql, которая не справляется с потоком SQL запросов. Но - в люб…
Ноябрь 15th, 2008 - 6:08 дп
Да, это жаль, что для phpbb2 нет модов…
Январь 9th, 2011 - 1:33 дп
Memcached действительно дает прирост производительности вашего сайта. Но лучше использовать его в связке nginx(fronten for apache)+apache+eAccelerate+memcached.
И тогда получите почти идеальный вариант производительности для большинства проектов. У меня после установки на сайте получилось рост в 3 раза приблизительно по скорости загрузки и выполнения.
все стоит на СentOs 5.5 и отлично работает.
Советую попробовать этот вариант.
Январь 11th, 2011 - 6:33 пп
Стоит nginx+apache+MySQL+eAccelerator+memcached. Параметры VPS 512Mb 500 Mhz. Сайт подвисает на N секунд прежде, чем отдать контент. Где узкое место? MySQL ест до 50% CPU во время работы (непостоянно).
Август 29th, 2011 - 5:20 пп
А инвалидацией кэша в такой схеме кто будет заниматься?