Вы чо курите? Тяжело тестировать двиг перед выпуском? Ваша лень в написании 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 не слышали?
Пиздец одним словом.
хоть сервис по апдейту файлов этого движка делай! блеядь .. руки уже устали
Не говоря уже о том, что пейджер надо оптимизировать, чтобы он базу не нагружал как гавно слона, а вы … как по учебнику все. Опыта то совсем нет чтоли разработки? Как базы себя ведут не знаете? дурдом.
Запросы по 10 секунд выполняются .. куда катится мир, и это новостной движек рассчитанный на нагрузку и большое количество записей
Привет! Бедем очень рады такому онлайн сервису, ну или хотя бы исправленному sql. Заранее спасибо.
Алексей, есть под рукой немаленькая ДЛЕшка? просто вдруг это у моего бд сервера боку снесло, написал я конечно ядовито, но моей злобе не было предела
По факту, я знаю еще методики ускорить запросики, вот например запросик
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)
Есть разница? результаты возвращает очевидно одинаковые
Вот если бы разработчики ДЛЕ писали запросы правильно, то двиг бы РЕАЛЬНО летал, ибо сложного там ничего нет в плане аналитики .. а щас это кусок тормозного говна, переписывать все запросы руками — застрелиться, да и зачем мне это, не так уж много и приносит он дле ибо серьезных проектов на нем у меня нету
более интересные 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 раз выше
А вообще, движек с такой древней историей, исполненный внутри как кусок говна что в плане пхп что в плане запросов … стыдно мальчики
Дуд детка жги еще, я хочу от тебя детей))
Дуд отсупите травы, хочу хуячить такие же пиздатые запросы как у вас:)
я в краснодаре сейчас живу, у меня конопля под окном растет, вот и пишутся запросы на отлично xDD
Что посоветуете почитать по теме запросов и основ, азов работы с БД? как насчет выслать пару брикетов травки почтой?
Все конечно правильно и критика DLE в том числе, но тут следует задать вопрос себе и остальным, каждый второй гений, а толку 0.0, DLE и та с Германии… Обосрать говнокод может каждый, а вот написать свой Продукт…
дуд кодер вы опытный я знаю, так какого лешего вы это гавно юзаете?
Ага, Вас услышат… Скажут — это не так важно, а в след релизе исправят… Пройденная практика. Около 10 случаем у меня таких было с ними.
советую почитать для начала хабр, и ссылки которые там приводят в статьях и комменатриях.
http://habrahabr.ru/blogs/mysql/
Раньше вроде бы был еще блог Mysql Performance либо я чтото путаю. Вот еще интересный сайт, но не русско язычный, если не пугает — то велкам http://www.mysqlperformanceblog.com
2Serg может в россии все настолько плачевно(было по крайней мере) что во времена создания той же DLE она не была бы не куплена ни разу и жрать разработчикам нечего бы было?
2kukusa — на 1 сайте, я вообще сайты не держу по факту, вот сейчас появилось 2 сайта адалт тематики. Один из них как тест был сделан на ДЛЕ, сейчас плачу, смотря на сервер, и удалить нельзя, трафик под касарь уников без вложений.. сделал другой сайт на собственном костыле, безо всяких финтифлюшек, жестко выполняющий только свои задачи, работает быстрее, не смотря что там база в 4 раза больше, ну а ДЛЕ я скорее обновлю до последней версии, и переработаю engine.php файл на запросики поинтереснее, вот только время
оно всему виной, не хватает
2RoC если вы имеете ввиду, что они в итоге это сделают — хорошо
Или вы имели ввиду что я не получу ссылку с их страницы мол «вот я такой крутой, придумал чо»? да мне без разницы в общем то, если захотят пусть сразу вебманями спасибо говорят
seodude а где править запросы? В PMA или в исходниках DLE ?
В исходниках дле конечно, но я бы этого не стал делать без должных знаний, сломать просто все
)
Ты какие файлы редактируешь, чтобы это всё изменить.
Просто вместо истерики — приводи добротные инструкции, что да как сделать?
Разраб ДЛЕ о тебе знает и твои посты почитывает, тем более в виду этого — давай нормальные детали!
Ikar
Почему он должен делать инструкции за бесплатно, по которым потом криворукие школьники что-то будут делать и ныть что не работает.
Вот график slow queries от мускуля. Прямая статичная нагрузка — проект веб апликуха контактовская с огромной базой (400 млн строк или 4 млрд ли, точно не помню). По той базе выполнялись запросы раз в секунду статистические и еще была обычная нарузка от запусков приложений.
Ту базу я отключил, нагрузка спала, поставил ДЛЕ ну и видно нагрузку от него в зависимости от наполнености .. она растет …
2Ikar, Да я вроде не истерю, проистерился уже
Заистерил когда увидел что на сервере где практически ничего нет, есть только длешник нагрузка на винт идет перманентная под 80 мбайт в секунду чтение и запись — вот тут поистерил
инструкции не буду приводить по причине, которую kukusa указал — чтобы потом меня школьники прокляли?
спасибо, карма и так не лучшая =)
Перенесу на дле 9.5, посмотрю что будет(сейчас дле 9.3), если будет так же — даже возможно адаптирую хотя бы часть запросов под более высокоскоростные выборки, ну и выложи изменные файлы, а разработчики — лестно что ктото знает
может даже значит прислушаются и сделаю отличный в плане «быстрый старт» движек, который не падает при смешных нагрузках.
Цель – $15,000 в месяц до исполнения 40 лет
))
Тада он — ноль, бестолочь…
обижусь =)
Запостил подсказал народу в какую сторону думать и ладно, главное себе помог, а остальные пусть сами себе делают, ото половину дле-шников настолько ахуена что кроме «дай за отзыв», «тебе слабо» нечего не могут сами.
Дуд парнуха это плохо)
знаю что плохо, но что поделать, все делают, а я чо?
))
15 тысяч записей в dle_post, запрос с implicit conversion (and approve) выполняется столько же, как и правильный (and approve=1) по 0.1sec. Server version: 5.0.77. Где засада?
Засада в том что записей мало, если я правильно посчитал то запрос в старт посте для бд с количеством записей ~200к
в обещм я погорячился получается, херня не в дле возможно, а в сервере, возможн связано с ле, возможно наплывы ботов поисковых .. 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
Статистика и настройки в общем то говорят что серверу достаточно ресурсов и в общем то он пинает хуй)
вот такие вот запросики валят неплохо базу ибо не юзают индексы. При ненагруженной базе то они показывают достаточно номральные результаты, а раз юзают 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;
по хорошему подобные запросы можно переписать так, чтобы они почти не трогали винт … ладно, пойду погуляю
Автор статьи, побеседуйте на эту тему с автором движка вот тут: http://forum.dle-news.ru/index.php?showtopic=56455
чтото странное с сервером оказывается, возможно меня боты одновременно решили посканировать чтоли, ладно, пока забуду эту историю, пока настроил всякие счетчики и тп — понаблюдаю
а дле все равно надо оптимизировать
работайте, не расслабляйтесь)
А что сразу в кусты, approve=1 будет быстрее чем просто approve…
Там в теме на сайте разработчика есть тест от Wanderers.
почему в кусты то
просто дела другие есть, да я видел текст (ненавижу когда редактируют сообщения, ведь их потом надо перечитывать, случайно наткнулся на его сообщение). Я подзревал что когда без =1 — происхдит какое то нездоровое сканирование таблицы/индексов на совпадение с типами данных или чем то подобным, это у меня и сыграло. По факту — я не люблю магию и считаю что всетаки четкое приведение типов — хорошо, поэтому использовал бы =1
но не я пишу этот скрипт, сервер у меня восстановился, настроение стало хорошим
Написать Врапер 3306 между слоем (клиента — сервера), наверно религия не позволяет
https://github.com/dpage/mysql_fdw
Не нравится — не используем. В чем проблема? Можно и Drupal взять.