Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
f2065

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

Recommended Posts

Конвертнул форум с 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 секунд.

 

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

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

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

Share this post


Link to post

Включил 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 вызова по одному циклу.

 

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

Share this post


Link to post

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

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

 

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

Edited by f2065
  • Upvote 2

Share this post


Link to post

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

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...