Медленный запрос зависает на сервере - PullRequest
0 голосов
/ 04 октября 2018

У меня проблема с моим веб-сайтом, и сервер рассказывает об этом из-за медленного запроса MySQL.Мой сайт находится в Wordpress CMS.Ниже приведен запрос, который создает проблемы.Я не уверен, когда этот запрос выполняется.В моей базе данных более 70000+ пользователей.

# Query_time: 1078.445935  Lock_time: 0.000236 Rows_sent: 59  Rows_examined: 379721873
SET timestamp=1538539120;
SELECT DISTINCT wp_users.ID FROM wp_users LEFT JOIN wp_usermeta ON ( wp_users.ID = wp_usermeta.user_id )  LEFT JOIN wp_usermeta AS mt1 ON ( wp_users.ID = mt1.user_id )  LEFT JOIN wp_usermeta AS mt2 ON ( wp_users.ID = mt2.user_id )  LEFT JOIN wp_usermeta AS mt3 ON (wp_users.ID = mt3.user_id AND mt3.meta_key = 'wpseo_noindex_author' ) WHERE 1=1 AND wp_users.ID IN ( SELECT DISTINCT wp_posts.post_author FROM wp_posts WHERE wp_posts.post_status = 'publish' AND wp_posts.post_type IN ( 'post', 'page', 'attachment', 'static-block' ) ) AND ( 
  wp_usermeta.meta_key = '_yoast_wpseo_profile_updated' 
  AND 
  ( 
    ( mt1.meta_key = 'wp_user_level' AND mt1.meta_value != '0' ) 
    AND 
    ( 
      ( mt2.meta_key = 'wpseo_noindex_author' AND mt2.meta_value != 'on' ) 
      OR 
      mt3.user_id IS NULL
    )
  )
) ORDER BY wp_usermeta.meta_value+0 

DESC;

1 Ответ

0 голосов
/ 11 октября 2018

Yoast SEO https://wordpress.org/plugins/wordpress-seo/ плагин выдает этот SQL-запрос.Он просто не предназначен для такого количества пользователей, и его запросы SQL не ожидают этого.

Конечно, самое чистое решение - не использовать этот плагин для таких сайтов.

В случае критической ситуациии вы не можете его отключить - конечно, есть некоторые способы, которые можно обойти, или модификация кода.

Он вызывается из class-author-sitemap-provider.php файла, метода get_users.Прямо сейчас он проходит через все ваши сообщения, а затем опрашивает пользователей, которые когда-либо публиковали сообщения.Вы можете попытаться установить $defaults['has_published_posts'] = true; в false, чтобы хотя бы исключить таблицу сообщений из запроса.Удаление параметра meta_query сделает запрос еще проще.Но все это, конечно, грязные хаки, которые повлияют на функциональность.

...