Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
f2065

Очень тормозит гл.страница форума из-за хука последних тем

Рекомендованные сообщения

Конвертнул форум с vB 3.8 на IPB 3.4.9 и возникла проблема - главная страница открывается через 20-30 секунд!

8-ядерный Xeon E5-2630 на 100% грузится.

Форум то причём не большой - база 50мб, 2000 топиков, 6000 постов, 1000 юзеров.

Но, разделов на форуме 800… Правда они вложенные на несколько уровней - корневых 30, у 5 из них по десятку подразделов (т.е. на гл.странице только 35 разделов в итоге), в подразделах тоже по несколько подразделов.

 

Переключил режим производительности - Tools & Settings > Performance Mode, и форум стал летать.

На основании подсказки о затрагиваемых опциях - вычислил что виноваты хуки, а точнее - виноват один только «Последние темы v1.0.0»

 

Можно конечно «Последние темы» выключить и всё. Но хотелось бы разобраться в сути проблемы.

Вычитал что IPB плохо тянет несколько сотен форумных разделов, но…

 

Есть другой форум на этом же самом сервере, с базой в 2гб, десятками тысяч пользователей и сотнями тысяч постов. Кол-во форумных разделов около 200. Весь набор IPB-софта такой же. Включил там хук «Последние темы v1.0.0» - и проблем не возникло, вообще даже разницы нет. С секундомером замерял - что без хука что с хуком главная страницу загружается за 2 секунды.

 

Не верится что вот такая резкая разница от кол-ва разделов может быть: 200 разделов грузится за 2 секунды, а 800 разделов за 30 секунд.

 

В чём может быть проблема с хуком Последние темы?

Какие-то индексы в базе? Но те которые самодиагностируются в ац - одинаковые на обоих сайтах.

Ошибок в логах нет, последние темы выводятся нормально. Только вот с тормозами по полминуты…

Поделиться сообщением


Ссылка на сообщение

Ссылку на форум

Поделиться сообщением


Ссылка на сообщение
04/22/17 21:12 (изменено)

Включил IPS_SQL_DEBUG_LOG, но там нет ничего подозрительного, все запросы выполняются менее чем за 0.001с

Хотя наверно запросы от хука не попадают туда.

 

Отредактировал функцию hooks_recentTopics - понаставил там на каждом шаге запись времени в лог.

И оказалось что тормоза именно там во вложенных циклах, вот в этом месте:

 

	/* Grab last X data */
	foreach( $this->forum_by_id as $forumID => $forumData )
	{
		if ( ! $forumData['can_view_others'] AND ! $this->_memberData['is_mod'] )
		{
			continue;
		}

		if ( $forumData['password'] != '' )
		{
			continue;
		}

		if ( ! $this->registry->permissions->check( 'read', $forumData ) )
		{
			continue;
		}

		if ( is_array( $bvnp ) AND count( $bvnp ) )
		{
			if ( in_array( $forumID, $bvnp ) )
			{
				continue;
			}
		}

		/* Still here? */
		$_topics = $this->lastXThaw( $forumData['last_x_topic_ids'] );

		if ( is_array( $_topics ) )
		{
			foreach( $_topics as $id => $time )
			{
				if( in_array( $time, $timesUsed ) )
				{
					while( in_array( $time, $timesUsed ) )
					{
						$time +=1;
					}
				}

				$timesUsed[]       = $time;
				$topicIDs[ $time ] = $id;
			}
		}
	}

 

foreach( $this->forum_by_id as $forumID => $forumData ) - этот цикл первые 200 форумов пробегает за 1 секунду, а далее начинает постепенно тормозится и к 1000 форумов ползёт по 15 форумов в секунду.

Однако пропорционально растёт цисло циклов в while( in_array( $time, $timesUsed ) ), вначале циклов нет, потом по 2-3, потом десятки, а под конец - более 1000 циклов за раз.

 

А вообще за весь вывод - $time +=1; срабатывает более 600000 раз…

 

Есть идеи в чём может быть проблема? Интуитивно подозреваю что-то с датами где-то у постов в базе не то…

$time +=1; - там в цикле перебираются unixtime-даты в районе 2015г, по 10-25 минут с шагом 1сек (вообще как-бы середина форума - есть топики и более старые и современные).

 

Проверил лог этой функции на большом форуме - там однако while( in_array( $time, $timesUsed ) ) не крутится практически, только 2 вызова по одному циклу.

 

Индексы попробуйте включить
Да их никто и не выключал… Выкл/вкл - ничего в итоге не изменилось. Изменено пользователем f2065

Поделиться сообщением


Ссылка на сообщение
04/23/17 15:08 (изменено)

Вобщем нашёл причину - тысяча топиков была сделана или перенесена ещё откуда-то, и у них одинаковое время.

Хук начинает анализировать их всех и отсюда такие тормоза.

 

Т.е. если роботы или люди в один момент создадут много топиков - то форум будет парализован из-за проблем в логике этого хука.

Изменено пользователем f2065
  • Upvote 2

Поделиться сообщением


Ссылка на сообщение

Есть хук получше, называется (SOS34) Topics Stats on Board Index Sidebar.

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...