| DElf Постоянный посетитель
 
  
 Зарегистрирован: 20.07.2015
 Сообщения: 190
 Откуда: Миасс
 
 | 
			
				|  Добавлено: Вс 27 Сен 2015 г. 20:57:25    Заголовок сообщения: Ускорение выдачи, использование memcache |   |  
				| 
 |  
				| Доброго времени суток, 
 У меня предложение по скорости работы сайта. В нагруженные часы ощущаются тормоза выдачи страниц
   Как таковой проблем не испытываю, но сижу на оптике и хочется чуть большей скорости от любимого форума. Думаю, многие разделяют мое желание.
 Рассмотрите пожалуйста, частичный переход на memcached - если технические возможности позволяют это.
 
 
  	  | Цитата: |  	  | Итак имеем 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 раза.
 | 
 
 Веду к тому что пользователей без авторизации, можно отправлять в кеш который храниться скажем, 3 часа, а пользователей которые сидят зарегистрировались на 5 минутный кеш, вот таким образом снизить нагрузку на базу можно очень сильно и повысить скорость выдачи.
 
 p.s. надеюсь на ваше понимание и содействие.
 _________________
 Чернильный шопоголик
 |  |