Перейти к контенту
  • 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
Ссылка на комментарий
Поделиться на других сайтах

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

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

Гость
Ответить на вопрос...

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

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

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

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

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

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

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

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