Перейти к контенту
  • 0

База данных после апгрейда


vain

Вопрос

SQL Total Time: 9.62377 for queries

это ж неимоверно много :D

форум грузится соответственно очень долго...

так стало после апгрейда с 2.0.4...

в режиме отладки виден запрос, который "кушает" кучу времени:

 

SELECT * FROM ipb_members WHERE -172800 ORDER BY members_display_name ASC

MySQL time: 7.566

 

кто-нибудь знает что можно сделать? анализ, починку и оптимизацию таблиц уже делал.

заранее спасибо.

Ссылка на комментарий
Поделиться на других сайтах

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

  • 0

Эта же проблема на 2.3.5

был сделан апргрейд с 2.1.7

Кто знает в чем дело ?

Изменено пользователем redline99
Ссылка на комментарий
Поделиться на других сайтах

  • 0

послать их на юг, купить сервер

это все равно, что писать, если вы не отрежете себе руку и ухо, мы вас посадим в тюрьму

Ссылка на комментарий
Поделиться на других сайтах

  • 0
SELECT * FROM ipb_members WHERE -172800 ORDER BY members_display_name ASC

MySQL time: 7.566

 

 

~5900

Хостер(мастерхост), пишет что это тяжелый запрос, и если проблема не будет решена, отрубит sql.

 

 

 

Попробовал на живом форуме у другого хостера аналогичный запрос с лимитом 0, 6000:

Запрос занял 0.2874 сек
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Да сам запрос занимает мало времени, но вот после его отключения, время генерации страницы уменьшилось с 1-1.5с. , до 0.2-0.3с.

 

Из-за этого пришлось отключить мод "Были онлайн сегодня". Наверное придется искать другое решение этой модификации...правда не знаю, существует ли.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

ну ессесно у тебя селектом выдёргиваются все пользователи.

Это в каком функционале в форуме такой запрос?

Ссылка на комментарий
Поделиться на других сайтах

  • 0
ну ессесно у тебя селектом выдёргиваются все пользователи.

Это в каком функционале в форуме такой запрос?

Из-за этого пришлось отключить мод "Были онлайн сегодня". Наверное придется искать другое решение этой модификации...правда не знаю, существует ли.

И что самое интересное, выложенный здесь мод давал у меня другой запрос :D

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Мода два.

http://www.ibresource.ru/db/663/

$this->ipsclass->DB->simple_construct(array('select' => '*', 'from' => 'members', 'where' => "id>0 AND last_activity>".time()-172800, 'order' => 'members_display_name ASC'));

http://www.ibresource.ru/db/825/

$this->ipsclass->DB->simple_construct(array('select' => 'id, name, members_display_name, last_activity, mgroup', 'from' => 'members', 'where' => "id>0 AND last_activity>'time()-86399'", 'order' => 'last_activity DESC'));

 

Откуда соответственно вытекают

1) SELECT * FROM ipb_members WHERE -172800 ORDER BY members_display_name ASC

2) SELECT id, name, members_display_name, last_activity, mgroup FROM ibf_members WHERE id>0 AND last_activity>'time()-86399' ORDER BY last_activity DESC

 

У меня стоял 1-ый. Но впринципе, со вторым они похожи. не знаю как хостер отреагирует на другой запрос. Возможно ли создание этого мода каким-либо другим методом ?

Изменено пользователем redline99
Ссылка на комментарий
Поделиться на других сайтах

  • 0

1. Сделать индекс по ibf_members.last_activity(или id+last_activity, это уже нужно проверять), если его не было.

2. Вас не смутило, что в запросе есть time()-172800, а в сообщении хостера просто WHERE -172800. Что-то мне кажется, что либо time() не было у вас в коде, либо эта функиция(о чудо!) всегда возвращала нуль. А это уже повод бить хостера :D

 

Откуда соответственно вытекают

1) SELECT * FROM ipb_members WHERE -172800 ORDER BY members_display_name ASC

2) SELECT id, name, members_display_name, last_activity, mgroup FROM ibf_members WHERE id>0 AND last_activity>'time()-86399' ORDER BY last_activity DESC

А во втором варианте автор ещё и кавычки не так как надо расставил, встречались с таким...

Ссылка на комментарий
Поделиться на других сайтах

  • 0

1. Он есть

2. После вашего замечания проверил еще раз. На самом деле так и есть, с любым из этих двух скриптов.

Вставлял код (мод 663)

$this->ipsclass->time_options['ONLINE_SHOW'] = "g:i A";
$data = array('memnum' => 0, 'members' => '');
$today = $this->ipsclass->get_time(time(), 'j-n-Y');
$this->ipsclass->DB->simple_construct(array('select' => '*', 'from' => 'members', 'where' => "id>0 AND last_activity>".time()-172800, 'order' => 'members_display_name ASC'));
$this->ipsclass->DB->simple_exec();
while ($row = $this->ipsclass->DB->fetch_row())
{
$time = $this->ipsclass->get_time($row['last_activity'], 'j-n-Y');
if ($time == $today)
{
$data['members'][$row['id']] = "<a href='{$this->ipsclass->base_url}act=Profile&MID={$row['id']}' title='".$this->ipsclass->get_date($row['last_activity'], 'ONLINE_SHOW', 1)."'>{$this->ipsclass->cache['group_cache'][$row['mgroup']]['prefix']}{$row['members_display_name']}{$this->ipsclass->cache['group_cache'][$row['mgroup']]['suffix']}</a>";
$data['memnum']++;
}
}
if (is_array($data['members']))
{
$data['members'] = implode(', ', $data['members']);
}
$this->ipsclass->time_options['ONLINE'] = $this->ipsclass->vars['ot_date'];
$data['memstats'] = sprintf($this->ipsclass->lang['ot_data'], $data['memnum'], $this->ipsclass->get_date(time(), 'ONLINE', 1));
$online_today = $this->ipsclass->compiled_templates['skin_boards']->online_today($data);

return $this->ipsclass->compiled_templates['skin_boards']->ActiveUsers($active, $this->ipsclass->vars['au_cutoff']).$online_today;

 

По идее должно работать. Но вот в чем проблема....неизвестно.

Изменено пользователем redline99
Ссылка на комментарий
Поделиться на других сайтах

  • 0
time()-172800 имхо должно быть в скобках :D
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Так ?

$this->ipsclass->DB->simple_construct(array('select' => '*', 'from' => 'members', 'where' => "id>0 AND last_activity>"[b].(time()-172800), [/b]'order' => 'members_display_name ASC'));

Буду благодарен, если поправите меня. :D

Изменено пользователем redline99
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Попробуйте:

$this->ipsclass->DB->simple_construct(array('select' => '*', 'from' => 'members', 'where' => "id>0 AND last_activity>".(time()-172800), 'order' => 'members_display_name ASC'));

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Сейчас получаю такой sql запрос:

SELECT * FROM ibf_members WHERE id>0 AND last_activity>1226497118 ORDER BY members_display_name ASC

Насколько я понимаю, так и нужно было ?

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Да, это уже лучше. Индекс стоит? Тогда можно посмотреть, будет ли это напряжно серверу.
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Откройте таблицу в phphMyAdmin, под списком полей будет слева табличка с индексами таблицы.

 

Но в этом я не профи, заранее результативность оценить не могу, нужно сравнивать.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

В sql запросе есть строка "members_display_name"

В табличке в индексами есть "members_l_display_name", колличество элементов - 6000.

Просто "members_display_name" не вижу.

Изменено пользователем redline99
Ссылка на комментарий
Поделиться на других сайтах

  • 0
В sql запросе есть строка "members_display_name"

В табличке в индексами есть "members_l_display_name", колличество элементов - 6000.

Просто "members_display_name" не вижу.

Во-первых, никто и не говорит, что он там должен быть.

Во-вторых, индекс нужно ставить не на поле сортировки, а на поле условия, т.е. на last_activity. Его нужно добавить, я об этом писал 10.11.2008, 22:09 :D

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Понятно, спасибо. Добавил.

 

Кстати, на что должен был повлиять этот индекс ?

Изменено пользователем redline99
Ссылка на комментарий
Поделиться на других сайтах

  • 0
На скорость выполнения запроса, с этим же была проблема :D
Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.