Support » Plugin: Yandex.News Feed by Teplitsa » Проблемы с загрузкой сервера Долгие запрос к MySQL

  • Resolved alexeymd

    (@alexeymd)


    Разбор запроса 1

    SELECT wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = ‘ytrssenabled_meta_value’ ) LEFT JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id ) WHERE 1=1 AND (

    wp_postmeta.post_id IS NULL

    OR

    ( mt1.meta_key = ‘ytrssenabled_meta_value’ AND mt1.meta_value != ‘yes’ )

    ) AND wp_posts.post_type = ‘post’ AND ((wp_posts.post_status = ‘publish’)) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 50;

    Запрос плохой

    post_id не может быть NULL тем не менее один из вариантов IS NULL

    Использование лишней OR

    Дважды (!) делается JOIN одной и той же таблицы при проверке одних и тех же параметров

    Вычисление с константой в JOIN (что скорее плохо чем нет)

    Модифицированный запрос без лажи (выводит ровно 1 в 1 такой же результат):

    SELECT wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) WHERE 1=1 AND wp_postmeta.meta_key = ‘ytrssenabled_meta_value’ AND wp_postmeta.meta_value != ‘yes’ AND wp_posts.post_type = ‘post’ AND wp_posts.post_status = ‘publish’ GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 50;

    Параметры исполнения

    Первоначальный чудовищный вариант

    Отображение строк 0 – 49 (50 всего, Запрос занял 18.2699 сек.)

    Вариант модифицированный мозгом

    Отображение строк 0 – 49 (50 всего, Запрос занял 0.0398 сек.)

    Есть много схожих запросов отличающихся значением wp_postmeta.meta_key в запросе и ещё использованием даты, например:

    SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = ‘layf_exclude_from_feed’ ) LEFT JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id ) WHERE 1=1 AND (

    wp_posts.post_date > ‘1970-01-01 23:59:59’

    ) AND (

    wp_postmeta.post_id IS NULL

    OR

    ( mt1.meta_key = ‘layf_exclude_from_feed’ AND mt1.meta_value != ‘1’ )

    ) AND wp_posts.post_type IN (‘post’, ‘page’) AND (wp_posts.post_status = ‘publish’) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 100;

    Всего значений wp_postmeta.meta_key по логу медленных запросов:

    ytrssenabled_meta_value – в исследовании выше, rss-for-yandex-turbo

    layf_exclude_from_feed – yandexnews-feed-by-teplitsa

    yzrssenabled_meta_value – rss-for-yandex-zen

    Эти запросы вызываются просто при обходе разделов сайта.

    Как модифицировать плагин что бы запросы были более быстрыми

    The page I need help with: [log in to see the link]

Viewing 2 replies - 1 through 2 (of 2 total)
  • Plugin Author Denis Cherniatev

    (@denischerniatev)

    Плагин использует стандартные возможности WP для выборки и фильтрации по мета-данным. JOIN таблицы мета-данных постов – издержки такого подхода. Если в формирование запроса вмешивается несколько плагинов, то этот JOIN может быть многократным. Пока оптимизация этого подхода не планируется.

    Приведенный вами медленный запрос формируется несколькими плагинами. В том числе rss-for-yandex-turbo и rss-for-yandex-zen. Там, скорее всего, используется тот же подход, и в совокупности, все эти плагины делают запрос таким тяжелым.

    Тут есть рецепт оптимизации for-yandex-turbo: https://wordpress.org/support/topic/%D0%BC%D0%B5%D0%B4%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B-%D0%B2-%D0%B1%D0%B4/

    Plugin Author Denis Cherniatev

    (@denischerniatev)

    Закрываю.

Viewing 2 replies - 1 through 2 (of 2 total)
  • The topic ‘Проблемы с загрузкой сервера Долгие запрос к MySQL’ is closed to new replies.