Уважаемые разработчики DLE

Июль 10th, 2011 по seodude Оставить ответ »

Вы чо курите? Тяжело тестировать двиг перед выпуском? Ваша лень в написании SQL запросов приводит сервера к краху.

Желающим сравнить. Есть например запрос написанный в «стиле дле».
SELECT SQL_NO_CACHE date FROM dle_post WHERE approve AND allow_main ORDER BY 1 DESC LIMIT 18765,15;
+---------------------+
| date |
+---------------------+
| 2011-05-15 13:57:11 |
| 2011-05-15 13:57:09 |
| 2011-05-15 13:57:07 |
| 2011-05-15 13:55:17 |
| 2011-05-15 13:52:38 |
| 2011-05-15 13:50:49 |
| 2011-05-15 13:48:46 |
| 2011-05-15 13:25:09 |
| 2011-05-15 13:21:48 |
| 2011-05-15 13:08:48 |
| 2011-05-15 13:01:00 |
| 2011-05-15 12:55:08 |
| 2011-05-15 12:51:24 |
| 2011-05-15 12:51:06 |
| 2011-05-15 12:48:16 |
+---------------------+
15 rows in set (3.08 sec)

Время выполнения заметьте.

И сравните если подписать к интовым полям =1 (разработчики ленятся это делать, либо считают что это «круто», возможно даже неебически круто)

SELECT SQL_NO_CACHE date FROM dle_post WHERE approve=1 AND allow_main=1 ORDER BY 1 DESC LIMIT 18765,15;
+---------------------+
| date |
+---------------------+
| 2011-05-15 13:57:11 |
| 2011-05-15 13:57:09 |
| 2011-05-15 13:57:07 |
| 2011-05-15 13:55:17 |
| 2011-05-15 13:52:38 |
| 2011-05-15 13:50:49 |
| 2011-05-15 13:48:46 |
| 2011-05-15 13:25:09 |
| 2011-05-15 13:21:48 |
| 2011-05-15 13:08:48 |
| 2011-05-15 13:01:00 |
| 2011-05-15 12:55:08 |
| 2011-05-15 12:51:24 |
| 2011-05-15 12:51:06 |
| 2011-05-15 12:48:16 |
+---------------------+
15 rows in set (0.01 sec)

У меня выделенный сервер кушает ресурсов и IO загоняет в полную жопу всего лишь на 30 тыс постов.

Если меня услышит случайно или неслучайно их тимлид — рекомендую отвесить люлей вашим разработчикам за подобную халатность.

Сейчас как дурак сижу и переписываю сотни запросов, спасибо вам!

Не говоря уже о вашем методе «множественные категории», вы про EAV не слышали?

Пиздец одним словом.

Реклама

36 комментариев

  1. seodude:

    хоть сервис по апдейту файлов этого движка делай! блеядь .. руки уже устали :-)

  2. seodude:

    Не говоря уже о том, что пейджер надо оптимизировать, чтобы он базу не нагружал как гавно слона, а вы … как по учебнику все. Опыта то совсем нет чтоли разработки? Как базы себя ведут не знаете? дурдом.

    Запросы по 10 секунд выполняются .. куда катится мир, и это новостной движек рассчитанный на нагрузку и большое количество записей :D

  3. Алексей С.:

    Привет! Бедем очень рады такому онлайн сервису, ну или хотя бы исправленному sql. Заранее спасибо.

  4. seodude:

    Алексей, есть под рукой немаленькая ДЛЕшка? просто вдруг это у моего бд сервера боку снесло, написал я конечно ядовито, но моей злобе не было предела :-)

    По факту, я знаю еще методики ускорить запросики, вот например запросик


    SELECT SQL_NO_CACHE id, autor, date, short_story, SUBSTRING(full_story, 1, 15) as full_story, xfields, title, category, alt_name, comm_num, allow_comm, allow_rate, fixed, rating, vote_num, news_read, votes, flag, editdate, editor, reason, view_edit, tags FROM dle_post WHERE category IN ('5') AND approve=1 ORDER BY date DESC LIMIT 660,15;

    15 rows in set (1.11 sec)

    переписываем запрос на запрос такого плана.


    SELECT SQL_NO_CACHE p.id, autor, date, short_story, SUBSTRING(full_story, 1, 15) as full_story, xfields, title, category, alt_name, comm_num, allow_comm, allow_rate, fixed, rating, vote_num, news_read, votes, flag, editdate, editor, reason, view_edit, tags FROM dle_post p INNER JOIN (SELECT id FROM dle_post WHERE category IN ('5') AND approve=1 ORDER BY date DESC LIMIT 660,15) i using(id);

    15 rows in set (0.02 sec)

    Есть разница? результаты возвращает очевидно одинаковые :-)

    Вот если бы разработчики ДЛЕ писали запросы правильно, то двиг бы РЕАЛЬНО летал, ибо сложного там ничего нет в плане аналитики .. а щас это кусок тормозного говна, переписывать все запросы руками — застрелиться, да и зачем мне это, не так уж много и приносит он дле ибо серьезных проектов на нем у меня нету :-)

  5. seodude:

    более интересные LIMIT’ы :-)


    SELECT SQL_NO_CACHE id, autor, date, short_story, SUBSTRING(full_story, 1, 15) as full_story, xfields, title, category, alt_name, comm_num, allow_comm, allow_rate, fixed, rating, vote_num, news_read, votes, flag, editdate, editor, reason, view_edit, tags FROM dle_post WHERE category IN ('5') AND approve=1 ORDER BY date DESC LIMIT 10000,15;
    15 rows in set (4.85 sec)

    «Мой вариант»

    SELECT SQL_NO_CACHE p.id, autor, date, short_story, SUBSTRING(full_story, 1, 15) as full_story, xfields, title, category, alt_name, comm_num, allow_comm, allow_rate, fixed, rating, vote_num, news_read, votes, flag, editdate, editor, reason, view_edit, tags FROM dle_post p INNER JOIN (SELECT id FROM dle_post WHERE category IN ('5') AND approve=1 ORDER BY date DESC LIMIT 10000,15) i using(id);
    15 rows in set (0.02 sec)

    магия? нет, понимание мат части :-)

    Не верите моим результатам — протестируйте запросы на своей базе и убедитесь что я не шарлотан xD

    А ну и к слову — у меня проставлено еще парочка индексов на таблице, а то было совсем плачевно, результаты у нас могут отличаться, до простановки индекса у меня результаты были в 3-5 раз выше :(

    А вообще, движек с такой древней историей, исполненный внутри как кусок говна что в плане пхп что в плане запросов … стыдно мальчики :-)

  6. kukusa:

    Дуд детка жги еще, я хочу от тебя детей))

  7. kukusa:

    Дуд отсупите травы, хочу хуячить такие же пиздатые запросы как у вас:)

  8. seodude:

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

  9. kukusa:

    Что посоветуете почитать по теме запросов и основ, азов работы с БД? как насчет выслать пару брикетов травки почтой?

  10. Serg:

    Все конечно правильно и критика DLE в том числе, но тут следует задать вопрос себе и остальным, каждый второй гений, а толку 0.0, DLE и та с Германии… Обосрать говнокод может каждый, а вот написать свой Продукт…

  11. kukusa:

    дуд кодер вы опытный я знаю, так какого лешего вы это гавно юзаете?

  12. RoC:

    Ага, Вас услышат… Скажут — это не так важно, а в след релизе исправят… Пройденная практика. Около 10 случаем у меня таких было с ними.

  13. seodude:

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

    http://habrahabr.ru/blogs/mysql/

    Раньше вроде бы был еще блог Mysql Performance либо я чтото путаю. Вот еще интересный сайт, но не русско язычный, если не пугает — то велкам http://www.mysqlperformanceblog.com

  14. seodude:

    2Serg может в россии все настолько плачевно(было по крайней мере) что во времена создания той же DLE она не была бы не куплена ни разу и жрать разработчикам нечего бы было? :-)

    2kukusa — на 1 сайте, я вообще сайты не держу по факту, вот сейчас появилось 2 сайта адалт тематики. Один из них как тест был сделан на ДЛЕ, сейчас плачу, смотря на сервер, и удалить нельзя, трафик под касарь уников без вложений.. сделал другой сайт на собственном костыле, безо всяких финтифлюшек, жестко выполняющий только свои задачи, работает быстрее, не смотря что там база в 4 раза больше, ну а ДЛЕ я скорее обновлю до последней версии, и переработаю engine.php файл на запросики поинтереснее, вот только время :-) оно всему виной, не хватает :(

  15. seodude:

    2RoC если вы имеете ввиду, что они в итоге это сделают — хорошо :-)
    Или вы имели ввиду что я не получу ссылку с их страницы мол «вот я такой крутой, придумал чо»? да мне без разницы в общем то, если захотят пусть сразу вебманями спасибо говорят :-)

  16. Стенд:

    seodude а где править запросы? В PMA или в исходниках DLE ?

  17. seodude:

    В исходниках дле конечно, но я бы этого не стал делать без должных знаний, сломать просто все :-) )

  18. Ikar:

    Ты какие файлы редактируешь, чтобы это всё изменить.
    Просто вместо истерики — приводи добротные инструкции, что да как сделать?
    Разраб ДЛЕ о тебе знает и твои посты почитывает, тем более в виду этого — давай нормальные детали!

  19. kukusa:

    Ikar
    Почему он должен делать инструкции за бесплатно, по которым потом криворукие школьники что-то будут делать и ныть что не работает.

  20. seodude:

    Вот график slow queries от мускуля. Прямая статичная нагрузка — проект веб апликуха контактовская с огромной базой (400 млн строк или 4 млрд ли, точно не помню). По той базе выполнялись запросы раз в секунду статистические и еще была обычная нарузка от запусков приложений.

    Ту базу я отключил, нагрузка спала, поставил ДЛЕ ну и видно нагрузку от него в зависимости от наполнености .. она растет …

    2Ikar, Да я вроде не истерю, проистерился уже :-)
    Заистерил когда увидел что на сервере где практически ничего нет, есть только длешник нагрузка на винт идет перманентная под 80 мбайт в секунду чтение и запись — вот тут поистерил :-)

    инструкции не буду приводить по причине, которую kukusa указал — чтобы потом меня школьники прокляли? :-) спасибо, карма и так не лучшая =)

    Перенесу на дле 9.5, посмотрю что будет(сейчас дле 9.3), если будет так же — даже возможно адаптирую хотя бы часть запросов под более высокоскоростные выборки, ну и выложи изменные файлы, а разработчики — лестно что ктото знает :-)

    может даже значит прислушаются и сделаю отличный в плане «быстрый старт» движек, который не падает при смешных нагрузках.

  21. Ikar:

    Цель – $15,000 в месяц до исполнения 40 лет :-)
    Тада он — ноль, бестолочь… :) ))

  22. seodude:

    обижусь =)

  23. kukusa:

    Запостил подсказал народу в какую сторону думать и ладно, главное себе помог, а остальные пусть сами себе делают, ото половину дле-шников настолько ахуена что кроме «дай за отзыв», «тебе слабо» нечего не могут сами.

  24. kukusa:

    Дуд парнуха это плохо)

  25. seodude:

    знаю что плохо, но что поделать, все делают, а я чо? :-) ))

  26. Haran:

    15 тысяч записей в dle_post, запрос с implicit conversion (and approve) выполняется столько же, как и правильный (and approve=1) по 0.1sec. Server version: 5.0.77. Где засада?

  27. kukusa:

    Засада в том что записей мало, если я правильно посчитал то запрос в старт посте для бд с количеством записей ~200к

  28. seodude:

    в обещм я погорячился получается, херня не в дле возможно, а в сервере, возможн связано с ле, возможно наплывы ботов поисковых .. implicit conversion на данный момент практически никак не влияет, по крайней мере на простые запросы.

    а про лимит все равно — надо их оптимизировать, они гонят когда есть выборки по нескольким полям + сортировка … тут какбы факт :-)

    у меня версия бд сервера 5.5 и на маке и на сервере. возможно фрагментация, хер его знает.

    [--] Up for: 19d 12h 6m 42s (12M q [7.609 qps], 494K conn, TX: 20B, RX: 2B)
    [--] Reads / Writes: 75% / 25%
    [--] Total buffers: 1.4G global + 176.3M per thread (50 max threads)
    [OK] Maximum possible memory usage: 10.0G (76% of installed RAM)
    [OK] Slow queries: 0% (24K/12M)
    [OK] Highest usage of available connections: 62% (31/50)
    [OK] Key buffer size / total MyISAM indexes: 128.0M/84.8M
    [OK] Key buffer hit rate: 100.0% (583M cached / 220K reads)
    [OK] Query cache efficiency: 31.7% (2M cached / 9M selects)
    [OK] Query cache prunes per day: 0
    [OK] Sorts requiring temporary tables: 0% (97 temp sorts / 201K sorts)
    [OK] Temporary tables created on disk: 8% (14K on disk / 186K total)
    [OK] Thread cache hit rate: 99% (62 created / 494K connections)
    [!!] Table cache hit rate: 2% (699 open / 23K opened)
    [OK] Open file limit used: 0% (538/200K)
    [OK] Table locks acquired immediately: 99% (121M immediate / 121M locks)
    [OK] InnoDB data size / buffer pool: 682.2M/1.0G

    Статистика и настройки в общем то говорят что серверу достаточно ресурсов и в общем то он пинает хуй)

  29. seodude:

    вот такие вот запросики валят неплохо базу ибо не юзают индексы. При ненагруженной базе то они показывают достаточно номральные результаты, а раз юзают limit + order — то получается что юзают винт, соотвтетсвенно если винт чем то занят — это получается тормоз …

    # Time: 110712 14:11:00
    # User@Host: seodude[seodude] @ localhost []
    # Query_time: 6.662662 Lock_time: 0.000090 Rows_sent: 15 Rows_examined: 32695
    SET timestamp=1310479860;
    SELECT id, autor, date, short_story, SUBSTRING(full_story, 1, 15) as full_story, xfields, title, category, alt_name, comm_num, allow_comm, allow_rate, rating, vote_num, news_read, votes, flag, editdate, editor, reason, view_edit, tags FROM dle_post where date >= '2011-05-01'AND date = '2011-05-01'AND date = '2011-05-01'AND date = '2011-05-01'AND date = '2011-05-01'AND date < '2011-05-01' + INTERVAL 1 MONTH AND approve=1 ORDER BY date DESC LIMIT 8595,15;

    по хорошему подобные запросы можно переписать так, чтобы они почти не трогали винт … ладно, пойду погуляю :)

  30. Слава:

    Автор статьи, побеседуйте на эту тему с автором движка вот тут: http://forum.dle-news.ru/index.php?showtopic=56455

  31. seodude:

    чтото странное с сервером оказывается, возможно меня боты одновременно решили посканировать чтоли, ладно, пока забуду эту историю, пока настроил всякие счетчики и тп — понаблюдаю :-)

    а дле все равно надо оптимизировать :-) работайте, не расслабляйтесь)

  32. Serg:

    А что сразу в кусты, approve=1 будет быстрее чем просто approve…
    Там в теме на сайте разработчика есть тест от Wanderers.

  33. seodude:

    почему в кусты то :-)

    просто дела другие есть, да я видел текст (ненавижу когда редактируют сообщения, ведь их потом надо перечитывать, случайно наткнулся на его сообщение). Я подзревал что когда без =1 — происхдит какое то нездоровое сканирование таблицы/индексов на совпадение с типами данных или чем то подобным, это у меня и сыграло. По факту — я не люблю магию и считаю что всетаки четкое приведение типов — хорошо, поэтому использовал бы =1 :-) но не я пишу этот скрипт, сервер у меня восстановился, настроение стало хорошим :-)

  34. Pandora:

    Написать Врапер 3306 между слоем (клиента — сервера), наверно религия не позволяет

  35. Galer:

    Не нравится — не используем. В чем проблема? Можно и Drupal взять.

Добавить комментарий

Subscribe without commenting