Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Что делать, если запросы к mysql долго обрабатываются?

Что делать, если запросы к mysql долго обрабатываются?


     28.01.2016    Все вопросы » Общие вопросы по PHP    2448

вопрос
Всем привет. Имеется сайт на DLE 10.6
Раньше я считал dle очень быстрым движком, но теперь моё мнение изменилось.

Имеется значит сайт, 300 000 новостей, из-за большого количества записей в dle_post, появились следующие проблемы:

1. При переходе на страницу новости, генерируются похожие новости, запрос который выбирает похожие новости, обрабатывается 40 секунд! Отключить не вариант!

2. При навигации по страницам новостей, так же слишком большая задержка из-за запроса к mysql, порядка 3 сек. Но тут к сожалению так и не удалось выяснить, какой конкретно запрос грузит.

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

Со второй проблемой всё ещё хуже, как я понял, дело в навигации, но пробовал вообще удалять код навигации вместе с запросом. И если ввести в адресе например 10 страницу сайта, все отлично, а если например перейти на 7000 через браузер, запрос всё равно обрабатывается дольше обычного.

Если кратко говорить, проблемы на сайте в тех местах, где делается запрос в dle_post

Кто, что думает по этому поводу? Как решить проблему?

Ответа пока нет


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

misha-koder
Юзер

misha-koder - 28 января 2016 20:50 -

Проверяйте индексы и кэш (как вариант - используйте memcached-сервер).
Оптимизируйте запросы, по возможности.
Арендуйте более мощный сервер.

bestazzz
Юзер

bestazzz - 29 января 2016 00:40 -

misha-koder,
Как оказалось, решить вторую проблему намного легче, что я и сделал :D
А вот как быть с первой проблемой? Ваши варианты тут к сожалению не подходят. При просмотре полной новости, используется полнотекстовый поиск по таблице, для вывода похожих новостей, его вряд ли получится оптимизировать. Лучше найти замену этому модулю. Мне самое главное, чтобы на странице с новостью, выводились ещё 15-20 новостей.
Мне вот идеально подходит сделать выборку новостей через RAND, в мускуле, он обрабатывается 4 секунды, быстрее чем искать похожие новости, но всё равно, для меня это не приемлемо долго. Может есть другие варианты?

misha-koder
Юзер

misha-koder - 29 января 2016 02:51 -

RAND - зло. Пробуйте ограничить полнотекстовый поиск одним полем title, убрав оттуда всё лишнее и перестроив индекс в таблице. Пробуйте убрать остальные ненужные условия из запроса, если таковые имеются.

lutskboy
Эксперт

lutskboy - 29 января 2016 13:01 -

Как оказалось, решить вторую проблему намного легче, что я и сделал

Интересно, как же вы сделали?
А на счет п.1
дле только первый раз делает выборку похожих новостей. дальше он берет готовые id
но если вам все равно какие новости будут в похожих новостях, то можно скриптом прописать любые id в dle_post_extras

bestazzz
Юзер

bestazzz - 29 января 2016 13:05 -

lutskboy,
Изменил запрос коунт, убрав из него условия.
Вторую проблему тоже решил. Изначально dle ищет похожие новости по названию, краткой и полной новости и т.д., сделал выборку только по title, проблема ушла :)

bestazzz
Юзер

bestazzz - 29 января 2016 13:08 -

Вот теперь думаю откатиться на dle 9.5 и сделать те же самые доработки, должно ещё быстрее работать, так как в 9,5 версии новости хранятся в одной таблице, а не в двух, как в новых версиях.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх