Wordpressで遅いクエリのソースを見つけるにはどうすればよいですか?


7

投稿数が8000を超えるWordPressサイトがあり、新しいサイトを追加するたびにサイトが応答しなくなります。MySQLのスロークエリログを確認したところ、postsテーブルのほとんどの行を返す選択を実行しており、実行に長い時間がかかっていることがわかりました。

これは例です:

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;

これらのクエリのソースを見つけるにはどうすればよいですか?

回答:


4

データベースクエリのパフォーマンスを確認するには、このプラグインhttp://wordpress.org/extend/plugins/debug-queries/を使用してみてください。作成されたすべてのクエリの詳細と、クエリの完了に必要な時間、およびページ全体を作成するのに必要な時間が表示されます。


プラグインは、クエリがどこから行われたかを理解できるようにするCall Fromも表示します。
Sisir 2011

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はこれら2つの列のソート順を表すため、このインデックスを試してください:

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

試してみる !!!


1

この問題は、Google XMLサイトマッププラグインに関連しています。http://wordpress.org/support/topic/plugin-google-xml-sitemaps-performance-issues-on-large-wp_posts-tables

「GETリクエストによるサイトマップの手動作成を有効にする」オプションを使用できます。手動で生成の進行状況をトリガーします。


OPがそのプラグインを使用していることをどこから知っていますか?
カイザー2013年

0

次のプラグインであるQuery Interfaceを試してください。これにより、クエリを表示できるだけでなく、インデックスや説明を確認することでクエリが何を行っているかを確認できるインターフェースが提供されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.