Производительность LS

Добрый день.
Я наконец то перенес сайт с дле на LS. Кое-что о производительности. Дано:
Сервер
Процессор Intel® Xeon® CPU E5620 @ 2.40GHz 2400.000 Mhz X 16
Оперативная память 16 гигов

БД 3,3 Гб
Пользователей: 262799
Блогов: 262877
Топиков: 399495
Комментариев: 928242
Запросов в секунду — до 60
Посетители онлайн — до 200 (по данным Яндекс Метрики)

На ДЛЕ не тормозило вообще
Про ЛС читаем дальше

Установлена в общем чистая LS из плагинов Nice URL и Main Preview
Включен memcache.

Просто при просмотре страниц все еще более-менее, но стоит написать хотя бы комментарий и начинается жесть.

MySql
query: 12
time: 0,922	
Cache
query: 82
— set: 5
— get: 41
time: 0,01271	
PHP
time load modules: 0,052
full time: 47,169

Просмотр профиля:

MySql
query: 20
time: 0,006	
Cache
query: 67
— set: 3
— get: 35
time: 0,00866	
PHP
time load modules: 0,05
full time: 14,532

или вот например просмотр личного сообщения
MySql
query: 73
time: 0,029	
Cache
query: 439
— set: 4
— get: 207
time: 0,03226	
PHP
time load modules: 0,05
full time: 3,08

вот главная
MySql
query: 19
time: 1,72	
Cache
query: 102
— set: 11
— get: 55
time: 0,01993	
PHP
time load modules: 0,053
full time: 2,181

Вижу сам что мускуль тормозит, но блин, раньше с дле же не тормозило.

И самая жесть — это я добавил комментарий (а добавляется он ооочень долго), и параллельно открыл главную (данные с главной):
MySql
query: 26
time: 2,58	
Cache
query: 103
— set: 14
— get: 59
time: 0,04127	
PHP
time load modules: 0,062
full time: 48,249


48 секунд! Откуда?

Господа, прошу вас помочь разобраться. Возможно что-то в движке подкрутить стоит, возможно в мускуле. Очень надеюсь на ваш совет.

59 комментариев

avatar
Вы включили отложенную рассылку уведомлений? По ходу просто система пытается тут же разослать уведомления.
avatar
Спасибо! Я идиот (
avatar
Помогло?
avatar
А какой скрипт надо в крон прописать?
avatar
\include\cron\notify.php?
avatar
Да.
Только в конфиге если не ошибаюсь, всего 10 штук за раз прописано. Пропишите больше (у меня одна тачка 300 писем за минуту легко рассылает, там сами посмотрите сколько ваша сможет отсылать).
Если понадобится слать по 10000 за пол-часа, возможно придется апдейтить систему рассылки
avatar
Я исправил на 15 и крон раз в минуту
avatar
Не стоит. Лучше сразу 500 на 5 минут ставь. При маленьких объемах ты выиграешь, это да, а если добавится в очередь 15000, посчитай, сколько у тебя будет эта очередь разгребаться по 15 писем в минуту?
avatar
Я считаю что 5 минут — это много. Например восстановление пароля тоже в ту очередь попадает, а там человек хочет получить письмо как можно быстрее, в отличии от уведомления.
avatar
Допишите маленький плагин и перегружайте настройку, чтобы сразу отправлять уведомление.
avatar
К тому же посмотрите внимательно классы, есть вероятность, что восстановление паролей вообще сразу же отправляется независимо от настроек отложености.
public function SendReminderPassword(ModuleUser_EntityUser $oUser,$sNewPassword) {
		$this->Send(
			$oUser,
			'notify.reminder_password.tpl',
			$this->Lang_Get('notify_subject_reminder_password'),
			array(
				'oUser' => $oUser,
				'sNewPassword' => $sNewPassword,
			)
		);
	}
avatar
Это решило проблемы с тормозами при добавлении комментария, но все равно я поворчу что все довольно медленно крутится )
avatar
Это решило проблемы с тормозами при добавлении комментария
Уже хорошо:-)
но все равно я поворчу что все довольно медленно крутится )
Так из коробки практически все всегда тормозит на больших нагрузках. Поискать слабые места и оптимизировать придется однозначно.
avatar
С письмами вообще беда — уходить не хотят. Хоть крон и стоит на раз в минуту — все равно какое-то письмо в таблице ls_notify_task уже 7 минут висит
avatar
Пытаюсь через браузер открыть этот файл (в htaccess убрал запрет) — все наглухо виснет, очень странно, так как до этого на ДЛЕ все письма нормально ходили, без тормозов.
avatar
Но вы хоть не сразу боевой сайт обновили? Тестируете только на копии или как?
avatar
Боевой обновил — в принципе все терпимо работает, просто не идеально. На тестовом я все пробовал — отлично было. Без нагрузки (пользователь онлайн) все летает.
avatar
Какое окружение установлено? Характеристики железа сервера — ничего не говорят.
avatar
А вообще — очень интересно, возможно, вам стоит провести тюнинг сообщя с разработчиками LS? Для обеих сторон это было бы очень полезно, я так думаю.
А результатами, советами с общественностью бы поделились…
avatar
я этот вопрос поднимал давно :) ort проигнорировал мой прямой вопрос ему на счет этого.
avatar
Ну так ты же учитывай, что в базе ЛС вес топиков увеличен в 2 раза за счет полного дубля в topic_text и topic_text_source. А если не укоротишь мануально topic_text_short, то и там будет полный текст. Тогда считай и база возрастет уже в 3 раза. И если у тебя топиков почти 400 тысяч, то в базе ЛС они превратятся в 1200 тысяч. Может из-за этого и тормозит.
  • aex
  • 0
avatar
Это понятно, но как мне кажется это не сильно влияет
avatar
Здесь почитай. Проблема старая.
avatar
Давно уже храню mysql на отдельном сервере, а сайт физически находится на хэндмэйд серваке p4/3gz/1.5gb/40gb в комнате московской общаги с выделенкой в 10mb. Перезагружается по звонку в течении 5 минут. Практически весь медиаконтент хранится в социальных сетях, это порядка 4гб картинок (про видео умолчу). Т.к у ливстрита все картинки в одной папке, это доп.нагрузка, кто юзал вебассист меня поймет. Когда пользователи создают фотосеты, в свои блоги, модераторы медийную составляющую переносят в соц.сети, на сервере же хранятся только аватары и сам движок. У меня стоят мосты с копией русской медиавики это 2.9гб контента (картинки подгружаются с викисклада) И стоит форум от чиффы, 100к+ постов, контенщики со старого форума туда переносят посты постоянно.

Все летает кроме коннекта с mysql, при авторизации бывают фризы по 20-30 секунд, независимо от хостеров. Иногда активации юзера не срабатывают, иногда рейтинг измененный не отображается сразу или просто теряется. Такое есть и с этим нужно как-то жить. Да и плагины оставлены лишь самые необходимые.

Да, есть над чем работать. Я не знаю вы используете nice url или нет, (для сохранения старых url страниц в поисковиках) но он тоже порядочно кушает.
avatar
nice url использую, для картинок cdn прикручу потом, но это все фигня — сильно тормозит база, что достаточно странно.
avatar
А настойки мускла то пробовали крутить?
avatar
Конечно )
avatar
А зачем ты вообще столько топиков держишь? Обычно юзеры читают только новые, 100-200 топиков. Да и то, это когда им вообще нечего делать. Просто интересно.
  • aex
  • 0
avatar
А то, что на многие топики есть внешние ссылки? Да и топики, в зависимости от направленности сайта, могут быть нужны практически все.
avatar
А почему все грешат на мускуль, когда время обработки запросов на порядок меньше общего времени генерации страницы? Это же видно по приведенным данным.
avatar

MySql
query: 15
time: 1,126	
Cache
query: 93
— set: 8
— get: 49
time: 0,01473	
PHP
time load modules: 0,05
full time: 1,536


Это главная
avatar
А, точно, значения же > 30сек были при отправке уведомлений.
Тогда только slow_query.log в руки и вперед.
avatar
Да чего там неясного. База забита. У меня 50 тыс. топиков и уже тормоза. А тут 400 тыс. Базу надо оптимизировать.
avatar
Оптимизировать командой «optimize, plz!», правильно понимаю?
Там же на главной из сложных выборок — только облако тегов, по идеи. Остальные выборки должны идти по индексам.
avatar
Я сделал проще. Убрал 40 тыс. топиков, поставил их в архив. Все стало опять летать.
avatar
Это не выход — надо чтобы осталось все.
avatar
slow_query.log и разбираться с каждым запросом что более 500мс (для начала) смотреть explain и вникать.

Правильно ли я понимаю что тут была ситуация что если одна страница висит (отправляя в этот момент письма) то и главная не начнет отображаться пока предыдущая страница не отвиснет?
avatar
Правильно ли я понимаю что тут была ситуация что если одна страница висит (отправляя в этот момент письма) то и главная не начнет отображаться пока предыдущая страница не отвиснет?
Да, по крайней мере с одного и того же компьютера.
slow_query.log и разбираться с каждым запросом что более 500мс (для начала) смотреть explain и вникать.
Так и буду делать
avatar
по зависаю страницы, только что провел тест. В одном экшене прописал слип. Открыл страницу с этим экшеном, жду пока выйдет время слипа. В это время для меня остальной сайт тоже висит.

Опытные господа, подскажите, это кривые настройки php-fpm, nginx или это нормальное поведение?

По slow_query.log будет интересно если вы скажите какие запросы тормозят работу. Может коллективно придумаем как их изменить в лучшую сторону. Готов поучаствовать
avatar
И мне интересно почему все висит
avatar
Итак, отчет по запросам:

Абсолютный чемпион:
SELECT
  tt.topic_tag_text,
  count(tt.topic_tag_text)      as count
  FROM
  ls_topic_tag as tt,
  ls_blog as b
  WHERE
  N = N
  AND
  tt.blog_id = b.blog_id
  AND
  b.blog_type <> 'S'
  GROUP BY
  tt.topic_tag_text
  ORDER BY
  count desc
  LIMIT N, N


Второе место:
SELECT SQL_CALC_FOUND_ROWS
  t.topic_id
  FROM
  ls_topic as t,
  ls_blog as b
  WHERE
  N=N
  AND t.topic_publish =  N AND ( t.topic_rating >= N  or topic_publish_index=N  )  AND ((b.blog_type='S') OR (b.blog_type='S'))
  AND
  t.blog_id=b.blog_id
  ORDER BY t.topic_date_add desc
  LIMIT N, N

Третье место:
SELECT SQL_CALC_FOUND_ROWS
  t.topic_id
  FROM
  ls_topic as t,
  ls_blog as b
  WHERE
  N=N
  AND t.topic_publish =  N AND ((b.blog_type='S') OR (b.blog_type='S'))
  AND
  t.blog_id=b.blog_id
  ORDER BY t.topic_date_add desc
  LIMIT N, N


Данные предоставлены утилитой mysqldumpslow
avatar
Explain первого запроса

1	SIMPLE	tt	index	blog_id	topic_tag_text	152	NULL	954189	Using temporary; Using filesort
1	SIMPLE	b	eq_ref	PRIMARY,blog_type	PRIMARY	4	getalbums2.tt.blog_id	1	Using where
avatar
о! я же сразу говорил, что облако тегов будет самым страшным!

А теги после переноса БД не смотрели? Там мусора точно нет?
Я когда с WP конвертил — офигивал от того, что мне там в теги нагенерировалось.
avatar
Я сам парсер писал, раньше у меня вообще не было тегов. Получилось примерно по три тега на топик. Не так и много. Вероятно в итоге я как раз и приду к его отключению.
avatar
А если попробовать свести похожие теги? Как минимум разные регистры одного и того же слова?
Вообще — каков процент уникальности тегов?
avatar
Наверное оставлю теги, но облако уберу.
avatar
Облако можно генерить раз в сутки, по крону, например, а так брать из файлового кеша. Как показала практика, навигация по тегам (из облака) не особо пользуется популярностью у стандартного посетителя.
avatar
Я бы сказал вообще не пользуется, удивительно что в движке так не сделано, чтобы облако обновлялось раз в день
avatar
Ну у всех разная реализация облаков тегов. В принципе, если привести к упорядоченности облако, то оно может стать весьма неплохим элементом навигации. Но речь, конечно, не про классическое облако.
avatar
оно кешируется на 3 дня и обновляется при апдейте любого топика
можно здесь github.com/livestreet/livestreet/blob/1.0.1/classes/modules/topic/Topic.class.php#L1125 заменить
array('topic_update','topic_new')
на
array()
avatar
Этот вариант полезен только тогда, когда очень много тегов, и незначительное изменение топиков не влияет на общее облако тегов
avatar
а так просто для себя узнать, таблицы у вас на innodb или myisam?
  • zibo
  • 0
avatar
InnoDB
avatar
Внезапно при загрузке топика:
MySql
query: 15
time: 0,025	
Cache
query: 126
— set: 7
— get: 62
time: 0,03026	
PHP
time load modules: 0,038
full time: 1,955

У топика 500 комментариев, это комменты так долго обрабатываются?
avatar
Построение древа, скорее всего.
avatar
А попробуйте в comment_tree.tpl вместо include comment.tpl вставить прямо содержимое comment.tpl

По крайней мере на 0.4.2 давало выигрыш при большом количестве комментов… пока там смарти для 700100500 комментов загружал шаблон… выгружал шаблон… Сразу говорю, что на 0.5.1 и выше не пробовал, может уже роли не играет.
avatar
А разве шаблоны не хранятся в кеше в скомпилированном виде?
avatar
Это вопрос к smarty :)

Факт остается фактом, на 0.4.2 такая проблема точно была, ноне знаю как теперь дело обстоит с переходом на Smarty3 — поэтому и сказал — попробуйте, этож дело 30 секунд…
avatar
Уважаемы Georgsius нужна помощь, ответьте в ЛС пожалуйста.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.