SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.04.2010 16:37:43

pernatik
Участник
Откуда: Белгород
Зарегистрирован: 12.04.2010
Сообщений: 5

Нужна оптимизация БД (вроде как)

Здравствуйте, погите нубу, нужна оптимизация БД
Использую MySQL 5 и движок DLE (DataLife Engine) 8.5

Есть лог медленных запросов:

from dle_category ct;
# Time: 100412  0:58:19
# User@Host: ankovalev[ankovalev] @ localhost []
# Thread_id: 10334632  Schema: ankovalev
# Query_time: 3.256909  Lock_time: 0.000151  Rows_sent: 0  Rows_examined: 638523  Rows_affected: 0  Rows_read: 11824
use ankovalev;
SET timestamp=1271019499;
select ct.id,
                                 (select count(*) from dle_post ps where  (ps.category REGEXP concat( '^(' ,ct.id, ',)'  ) or ps.category REGEXP concat( '(,' ,ct.id, ',)'  )  or ps.category REGEXP concat( '(,' ,ct.id, ')$' ) or ps.category=ct.id)  AND (DATE_FORMAT(date, '%Y%m%d')=CURDATE()) AND approve = '1') as new_,
                                 (select count(*) from dle_post ps where (ps.category REGEXP concat( '^(' ,ct.id, ',)'  ) or ps.category REGEXP concat( '(,' ,ct.id, ',)'  )  or ps.category REGEXP concat( '(,' ,ct.id, ')$' ) or ps.category=ct.id)  AND approve = '1') as allnews_
                          from dle_category ct;
# Time: 100412  0:58:25
# User@Host: ankovalev[ankovalev] @ localhost []
# Thread_id: 10334747  Schema: ankovalev
# Query_time: 3.225991  Lock_time: 0.000130  Rows_sent: 0  Rows_examined: 638523  Rows_affected: 0  Rows_read: 11824
use ankovalev;
SET timestamp=1271019505;
select ct.id,
                                 (select count(*) from dle_post ps where  (ps.category REGEXP concat( '^(' ,ct.id, ',)'  ) or ps.category REGEXP concat( '(,' ,ct.id, ',)'  )  or ps.category REGEXP concat( '(,' ,ct.id, ')$' ) or ps.category=ct.id)  AND (DATE_FORMAT(date, '%Y%m%d')=CURDATE()) AND approve = '1') as new_,
                                 (select count(*) from dle_post ps where (ps.category REGEXP concat( '^(' ,ct.id, ',)'  ) or ps.category REGEXP concat( '(,' ,ct.id, ',)'  )  or ps.category REGEXP concat( '(,' ,ct.id, ')$' ) or ps.category=ct.id)  AND approve = '1') as allnews_
                          from dle_category ct;
# Time: 100412  0:58:31
# User@Host: ankovalev[ankovalev] @ localhost []
# Thread_id: 10334837  Schema: ankovalev
# Query_time: 3.605283  Lock_time: 0.000096  Rows_sent: 0  Rows_examined: 638523  Rows_affected: 0  Rows_read: 11824
use ankovalev;
SET timestamp=1271019511;
select ct.id,
                                 (select count(*) from dle_post ps where  (ps.category REGEXP concat( '^(' ,ct.id, ',)'  ) or ps.category REGEXP concat( '(,' ,ct.id, ',)'  )  or ps.category REGEXP concat( '(,' ,ct.id, ')$' ) or ps.category=ct.id)  AND (DATE_FORMAT(date, '%Y%m%d')=CURDATE()) AND approve = '1') as new_,
                                 (select count(*) from dle_post ps where (ps.category REGEXP concat( '^(' ,ct.id, ',)'  ) or ps.category REGEXP concat( '(,' ,ct.id, ',)'  )  or ps.category REGEXP concat( '(,' ,ct.id, ')$' ) or ps.category=ct.id)  AND approve = '1') as allnews_

все они однотипные

Вообщем, не знаю что делать и надежда только на Вас

Неактивен

 

#2 12.04.2010 21:02:23

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Нужна оптимизация БД (вроде как)

FAQ #10.

Неактивен

 

#3 13.04.2010 10:22:23

pernatik
Участник
Откуда: Белгород
Зарегистрирован: 12.04.2010
Сообщений: 5

Re: Нужна оптимизация БД (вроде как)

paulus написал:

FAQ #10.

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

Неактивен

 

#4 13.04.2010 12:18:36

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Нужна оптимизация БД (вроде как)

Я понимаю, что рекомендация отказаться от движка — это не то, что сделает человек
сразу же smile Тем не менее, поглядите на этом форуме в поиске количество проблем с
DLE, и количество проблем с другими CMS.

Ну и из разумного: если бы всё работало, Вы бы сюда не пришли, верно?

Запросы, которые лежат у Вас в логе, не поддаются никакой оптимизации. Можно про-
бовать их переписать со стороны CMS, но это занятие неблагодарное. Впрочем, можете
попробовать. Мы переписывать этот движок не будем, т.к. FAQ#10 появился неспроста,
но на конкретные вопросы (если Вы решитесь переписывать его сами), разумеется,
ответим.

Неактивен

 

#5 13.04.2010 17:46:35

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Re: Нужна оптимизация БД (вроде как)

ОФФТОП: Забавно никогда до посещения этого форума про DLE не слыхивал, а зачем ее вообще применяют? По частоте возникновения проблем - это бесспорный лидер big_smile.

Неактивен

 

#6 13.04.2010 19:10:44

pernatik
Участник
Откуда: Белгород
Зарегистрирован: 12.04.2010
Сообщений: 5

Re: Нужна оптимизация БД (вроде как)

FiMko написал:

ОФФТОП: Забавно никогда до посещения этого форума про DLE не слыхивал, а зачем ее вообще применяют? По частоте возникновения проблем - это бесспорный лидер big_smile.

Более 70% сайтов рунета это движок DLE... стыдно, стыдно товарищи...

Отредактированно pernatik (13.04.2010 19:11:23)

Неактивен

 

#7 13.04.2010 19:19:55

pernatik
Участник
Откуда: Белгород
Зарегистрирован: 12.04.2010
Сообщений: 5

Re: Нужна оптимизация БД (вроде как)

Понял в чем проблема, ошибка в самописном модуле
(модуль выводит количество новостей всего и добавленных за сегодня в меню сайта)
Был вывод 1 тегом, я переделал на 2 тега чтоб красивее было(видно не доделал)

/*********Главное меню**********/
$count_news = dle_cache( "count_news_of_category", $config[’skin’] );
if( !$count_news )
{
  //кэш с количеством новостей пуст
    $sql_result = $db->query("select ct.id,
                                 (select count(*) from ". PREFIX ."_post ps where  (ps.category REGEXP concat( '^(' ,ct.id, ',)'  ) or ps.category REGEXP concat( '(,' ,ct.id, ',)'  )  or ps.category REGEXP concat( '(,' ,ct.id, ')$' ) or ps.category=ct.id)  AND (DATE_FORMAT(date, '%Y%m%d')=CURDATE()) AND approve = '1') as new_,
                                 (select count(*) from ". PREFIX ."_post ps where (ps.category REGEXP concat( '^(' ,ct.id, ',)'  ) or ps.category REGEXP concat( '(,' ,ct.id, ',)'  )  or ps.category REGEXP concat( '(,' ,ct.id, ')$' ) or ps.category=ct.id)  AND approve = '1') as allnews_
                          from ". PREFIX ."_category ct"
                          );
    $count_news_of_category = '';
    while($row = $db->get_row($sql_result))
   {
    $tpl->set('{newcount_categ_'.$row['id'].'}', $row['new_']);   
    $tpl->set('{allcount_categ_'.$row['id'].'}', $row['allnews_']);   
}
    /**В кэш **/
    create_cache( 'count_news_of_category', $count_news_of_category);
    $db->free();
}
else
{
  //достанем количество новостей из кэша
  $arr_newscount = explode('|', $count_news);
  for ($i = 0; $i <= count($arr_newscount) - 2; $i++)
  {
  $arr_onenews = explode('#', $arr_newscount[$i]); 
  $tpl->set('{count_categ_'.$arr_onenews[0].'}', $arr_onenews[1]);
  }
}
/************************************/

Неактивен

 

#8 13.04.2010 20:11:11

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Нужна оптимизация БД (вроде как)

А вот интересно, почему люди выбирают DLE?

Мое личное мнение такое: он официально стоит денег, а на шареварных сайтах его
выкладывают достаточно регулярно. Вот битрикс, например, который тоже стоит денег,
не выкладывают на шареварных сайтах ⇒ его меньше на сайтах «сделай.сам».
Любят в России пиратщину sad

Неактивен

 

#9 14.04.2010 08:41:15

pernatik
Участник
Откуда: Белгород
Зарегистрирован: 12.04.2010
Сообщений: 5

Re: Нужна оптимизация БД (вроде как)

Почему выбирают DLE???

1. В сравнении с другими CMS дает меньшую нагрузку на MySQL сервер (Для примера сайт на ДЛЕ с посещалкой больше 1000 давал меньше нагрузки на хостинг чем сайт на вордпресе с посещалкой чуть больше 300...)
2. Удобная во всех смыслах этого слова
3. Много шаблонов
4. Самое то для варез сайтов, музыки, софта и т.д. (журналистов не составит найти труда, которые будут постить бесплатно)
5. Много модулей

Опять же есть 1 существенный минус - это защита скрипта, но если есть моск, то не составит труда дороботать самостоятельно двиг smile

Неактивен

 

#10 14.04.2010 09:16:59

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Нужна оптимизация БД (вроде как)

paulus написал:

Вот битрикс, например, который тоже стоит денег,
не выкладывают на шареварных сайтах ⇒ его меньше на сайтах «сделай.сам».

3 года назад я смотрел на Битрикс - у него была ужасная архитектура. Как преимущество тогда называлось, что у него есть описание на 800 страниц (столько же, сколько мануал MySQL). Может быть после покупки его 1С что-то изменилось.

Из коммерческих адекватных CMS мне больше всего понравилась umi.cms, адекватные люди писали.

А насчет Open Source (все ИМХО)
  DLE лидер нашего форума по нестыковкам и багам.
  Joomla написана совершенно странно и с точки зрения безопасности, интерфейса и производительности. Плохо все.
  Drupal хорошо написан, но сложно с ним обращаться (нужно программировать логику). Производительность у него хорошая.
  Wordpress оптимален по интерфейсу, стандарты соблюдаются, написано все достаточно ясно. Если мне нужен пример ясного и понятного длинного запроса, совершенно не оптимального по производительности, достаточно посмотреть лог медленных запросов Wordpress.

Оптимизировать запросы CMS дело тяжелое. Не меняя структуру БД и функционал сайта изменить запросы тяжело. В ряде случаев можно запрос разбить на два, а в случае WordPress можно для конкретных страниц отказаться от общей схемы формирования запроса и вписать его руками для частного случая. Часто бывает, что тормозит не сама CMS, а ее модули, в этом случае проще.

Неактивен

 

#11 14.04.2010 15:35:00

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Нужна оптимизация БД (вроде как)

WordPress — это, конечно, не аналог для сравнения smile

А давайте тогда в FAQ пропагандировать umi.cms? Она, правда, платная...
Надо джангу пропихивать smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson