У меня есть сайт WordPress с более чем 8000 постов, и каждый раз, когда я добавляю новый, сайт перестает отвечать на запросы. Я проверил журнал медленных запросов MySQL и обнаружил, что он выполняет выборку, которая возвращает большую часть строк в таблице записей и требует много времени для выполнения.
Это пример:
Query_time: 149.702704
Lock_time: 0.000078
Rows_sent: 4699
Rows_examined: 9398
Rows_affected: 0
Rows_read: 4699
use 488726_wp;
SELECT `ID`, `post_author`, `post_date`, `post_date_gmt`, `post_status`, `post_name`, `post_modified`, `post_modified_gmt`, `post_parent`, `post_type`
FROM `wp_posts`
WHERE ( (post_status = 'publish' AND (post_type = 'post' OR post_type = ''))
OR (post_status = 'publish' AND post_type = 'page') )
AND post_password=''
ORDER BY post_modified DESC;
Как я могу найти источник этих запросов?
mysql
performance
holiveira
источник
источник
Что вы можете сделать, это выполнить EXPLAIN для запроса, как это:
Это покажет шаблон доступа, который использует MySQL для сбора необходимых данных.
Однако, просто глядя на предложения WHERE и ORDER BY, я хотел бы сделать следующее предложение: создать индекс, который может помочь ускорить запрос. Поскольку post_status и post_type имеют статические значения в запросе, а post_modified представляют порядок сортировки для этих двух столбцов, попробуйте этот индекс, пожалуйста:
Попробуйте!
источник
Эта проблема связана с плагином Google XML Sitemaps; http://wordpress.org/support/topic/plugin-google-xml-sitemaps-performance-issues-on-large-wp_posts-tables
Вы можете использовать опцию «Включить построение карты сайта вручную с помощью запроса GET». И запустить процесс генерации вручную.
источник
Попробуйте следующий плагин, интерфейс запросов , который позволит вам показывать запросы, а также даст вам интерфейс, где вы также можете проверить, что получает запрос, проверив его индексы или объяснения.
источник