Как уменьшить количество запросов в бд. WooCommerce (1200 запросов в БД)?
Всем привет! Помогите разобраться в такой ситуации:
Есть сайт - Wordpress + WooCommerce + еще ~10 плагинов. в WooCommerce 1000 пустых категорий без товаров.
Значит отключаю WooCommerce - на выходе имею 107 запросов в администраторской панели и 221 на главной странице
А при включенном - WooCommerce - получаю ~1160 запросов в администраторской панели и примерно столько же на главной странице
К слову.. на других страницах сайта ситуация не меняется, так что на Главной странице ничего сверхъестественного нету.
При отключении всех плагинов но оставленным WooCommerce - ситуация сильно не меняется - около 1000 запросов.
Мне помогло объектное кэширование с Redis, запросов сразу убавляется до ~36. Но вдруг база товаров вырастет до 100К и категорий товаров увеличится еще 1000, то что тогда? Чувствую что однажды прижмет, поэтому хочу решить проблему на начальном этапе. Надеюсь на вашу помощь, всех заранее благодарю за ответы.
UPDATE 02.03.19: В администраторской панели wp теперь нормальное количество запросов: ~90, дело было в корявом плагине для билдера страниц - создавал ооочень много запросов, увидел в query monitor - до этого что то не обратил внимание, грешил на тот же woocommerce.
PS: Сейчас удалил порядка 120 категорий - запросов уменьшилось на столько же.
из кастомного при создании категории только: иконки, которые отображаются рядом с названием в меню. UPDATE 02.03.19 17:48 Проблема решена :) Странно звучит, но решена она путем удаления выпадающего списка категорий из ПОЛЯ ПОИСКА (от темы)(то есть раньше можно было выбирать по каким таксономиям делать поиск) теперь количество запросов нормализовалось.
Stalker_RED, ну как сказать. В теории - однозначно да. На практике, в WP (да еще плюс WC сверху, а возможно еще какой-нибудь ACF в придачу) происходит постоянное обращение к wp_options, получение записей каждым виджетом / фрагментом страницы, а потом к каждой этой записи получение метаданных отдельным запросом и тд. И это вполне реальная ситуация. Вот только 98% этих запросов кешируемы, достаточно положить класс для работы с object cache. Да и 1140 из 1160 запросов не будут влиять на производительность настолько, чтобы это было заметно. Хорошо ли это? Не очень. Правильно ли это? Нет, конечно. Но это WP + WC. Плюс, скорее всего кривая кастомная конфигурация и через Ж собранная тема.
FOcuswOwX, есть ниньзи, сам видел. Но там (на wp) настолько кастомные велосипеды (к слову приличные, но слабомасштабируемые), что дешевле и практичнее любой eComm движек взять.
FOcuswOwX, Ответы про то, что на wordpress проекты такого масштаба лучше не делать - давно не актуальны, так как есть вполне заслуживающие внимания и бурно обсуждающиеся проекты на wp которые имеют огромные базы, трафик и так далее и которые смело можно назвать высоконагруженными. Но извините, обратиться к администраторам таких ресурсов с просьбой рассказать о конфигах сервера, костылях с woocommerce и настройкой самого wordpress - это как минимум глупо и бессмысленно.
veltolo,только чтобы это все работало, нужны офигеть какие мощностья, супер кеширование и тд. Хотя какое-нибудь специальное решение для электронной коммерции сделает то, что вы описали выше без всех этих запредельных мощностей.
FOcuswOwX, Ну про супер кэширования я конечно не слышал) страшно представить). Ну а про "офигеть какие мощностья" - я не думаю что если на vds вместо 128Мб оперативки поставить 2048Гб или поставить процессор с тактовой частотой 122000Гц то ситуация с ЗАПРОСАМИ в базу данных изменится в лучшую сторону. Но все же спасибо за предположение)
Wordpress неплохой выбор для небольшого интернет магазина, или для старта большого.
Но как только начинается нагрузка - нужно переходить на специализированные решения.
Оптимизировать конечно можно. Это типа как Рено Логан оптимизировать для перевозки грузов весом более 10тонн.
Если очень постараться можно и оптимизировать, но в конечно итоге дешевле купить камаз.
У меня 3100 товаров. Куча категорий и меток. Очень много фильтров в сайдбаре. Все работает отлично. Недавно читал о тестировании woocommerce с 50 000 товарами и все было в пределах нормы. Кроме того, сам полазил по различным сайтам и увидел что на том же опенкарт или мадженто тоже можно убить сервер))) Попадались жесткие черепахи (или динозавры). Если не ошибаюсь, мадженто намного больше запросов создает в сравнении с вукомерс по умолчанию. На крайняк можно поставить плагин Хард Бит Контрол для регулировки частоты запросов.
Вопрос ИМХО немного бредовый, что есть плагин - черный ящик.
Как его улучшить? Вопрос очевиден - обратится к разработчикам.
Что можно сделать, чтобы оптимизировать магазин? Написать свой плагин, или воспользоваться уже готовым решением.
Про кеширование говорить не буду, так как вопрос не про это.
Платить за доработку плагина также не советую, так как плагин обновляется.
Как-то так..
Андрей Андреев, я не пользуюсь чужими плагинами и темами, достаточно конструктора под названием WP.
Не все решения написаны мной, но они понятны мне и я с ними согласен.
Андрей Андреев, Вы восприняли этот вопрос бредовым, возможно потому что вы зациклились в вопросе на плагине WooCommerce. Но все же я благодарю за ваш ответ, уходить с WooCommerce - я конечно же не собираюсь, и буду воевать с ним дальше)
Тут речь идет не о конкретно WooCommerce, а о том, что любой плагин это черный ящик. И любые фильтры - до первого обновления.
И я не советовал Вам уходить с него, но на вопрос в контексте, которого он задан - он не решаем, перефразируйте и получите нужный ответ.
PS. Если Вам не нравится один плагин, пользуйтесь другим или напишите свой. Или тут возможен еще какой-то ответ? ))
Анатолий, Вопрос я как раз таки задавал с уклоном на WooCommerce, так как логично предположить что запросы лишние все таки он создает. Про уход с WooCommerce (а точнее с wordpress) извините, это в соседней веточке посоветовали, а я нас вот так в горяча)
veltolo, Вы серьезно считаете, что разработчики написали не оптимальный код с лишними запросами?
И сейчас какой-то Вася, Вам скажет пропишите строчку кода, и получите уменьшение запросов на половину?
))
Можно ли получить уменьшение запросов в 2-3 раза? Можно, только нужно переписать плагин с нуля, и заточить под определенную задачу.
Анатолий, "Вы серьезно считаете, что разработчики написали не оптимальный код с лишними запросами?"
Хех, я такого не говорил, не упоминал, не намекал на это, это всего лишь ваши догадки и предположения :)
И да, вы не поверите, но какой-то Вася сегодня действительно помог путем внесения "прописывания строчки кода" уменьшил количество запросов, правда не вдвое, но все же). Про переписку плагина с нуля мы уже слышали - еще лучше наверно весь Wordpress пересобрать. А вот про задачи тут уже интересно - а что у WooCommerce есть какая то мультизадачность отличающаяся от других ecommerce решений? Она уже заточена под определенную задачу - продавать товары. Ничего сверхъестественного)
Анатолий, Ну я надеюсь вы поняли что удаление мета неймов не относится к оптимизации запросов к БД :) Просто "Вася" решил прихватить еще одного "зайца".
Анатолий, Недоступен для (подключения, для захода, для входа, как угодно) другим (людям, компьютерам, сетевым устройствам) то есть он совершенно ограничен, его только я могу видеть. Странно звучит, но я не знаю как проще объяснить суть работы любого локального сервера.
Анатолий, Спасибо вам, да прибудут с вами основы принципов устройства и работы локальных серверов а так же работы WooCommerce и Wordpress :) Удачи в познаниях)
Даже не попытавшись посмотреть что именно нагружает БД? Новые тренды - разработка наугад.
Вы серьезно считаете, что разработчики написали не оптимальный код с лишними запросами?
Да такое на каждом шагу. Лично доводилось уменьшать с 306 запросов до 7 -
вместо 300 запросов в цикле получился один запрос.
1200 пока не встречал, но было бы любопытно посмотреть, чисто поржать.
мне ваш подход нравится, но профилирование уже было сделано посредством query monitor, было выявлено 20 дублирований. Было исправлено только 8, остальные пока не имеется возможности исправить да и главную проблему они не решают, просто капля в море
Так точно, большая часть, то есть почти все состоит из вот таких запросов:
По времени выполнения они конечно по нулям, но страницу само собой грузят не хило, в чем здесь дело - не могу понять.
Как упоминал ранее, после отключения WooCommerce - эти запросы пропадают.
veltolo, это криво реализованное получение терминов. Варианта 2 - либо переписать код, который за это отвечает в самой теме (и, например, получать все термины сразу одним запросом, а не поштучно), либо использовать fragment cache (быстро, дешево, маскирует проблему).
veltolo, да. Redis (или Memcached) спасет и с обычным object cache, но fragment cache еще лучше, хоть и руками пилить надо. Грубо говоря, object cache кеширует только результаты запросов, но делает это из коробки. Fragment cache позволяет кешировать уже сгенерированные куски HTML, но нужно писать самому. Берешь либу (на github есть много), и оборачиваешь нужные фрагменты в код, по такому же принципу как transients.