Как я могу найти источник медленных запросов в Wordpress?

7

У меня есть сайт 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;

Как я могу найти источник этих запросов?

holiveira
источник

Ответы:

4

Попробуйте использовать этот плагин http://wordpress.org/extend/plugins/debug-queries/ для проверки производительности ваших запросов к базе данных. Он показывает множество деталей о каждом сделанном запросе и время, необходимое для выполнения запроса, и время, необходимое для создания всей страницы.

Sisir
источник
плагин также показывает Call From, который может помочь вам понять, откуда выполняется запрос.
Сисир
2

Что вы можете сделать, это выполнить EXPLAIN для запроса, как это:

EXPLAIN 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 для сбора необходимых данных.

Однако, просто глядя на предложения WHERE и ORDER BY, я хотел бы сделать следующее предложение: создать индекс, который может помочь ускорить запрос. Поскольку post_status и post_type имеют статические значения в запросе, а post_modified представляют порядок сортировки для этих двух столбцов, попробуйте этот индекс, пожалуйста:

ALTER TABLE wp_posts ADD INDEX (post_status,post_type,post_modified);

Попробуйте!

RolandoMySQLDBA
источник
1

Эта проблема связана с плагином Google XML Sitemaps; http://wordpress.org/support/topic/plugin-google-xml-sitemaps-performance-issues-on-large-wp_posts-tables

Вы можете использовать опцию «Включить построение карты сайта вручную с помощью запроса GET». И запустить процесс генерации вручную.

Хусейн Бербероглу
источник
Откуда вы знаете, что ОП использует этот плагин?
Кайзер
0

Попробуйте следующий плагин, интерфейс запросов , который позволит вам показывать запросы, а также даст вам интерфейс, где вы также можете проверить, что получает запрос, проверив его индексы или объяснения.

Зеешан Хан
источник