我有一个Intel®Xeon(R)CPU E5-2620 v2 @ 2.10GHz,24核心/ 32 GB ram服务器,并且对来自具有20万个帖子的站点的查询感到奇怪。以下是其中一些:
+--------+------------------+-----------+--------------------+---------+------+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+
| Id | User | Host | db | Command | Time | State | Info | Progress |
+--------+------------------+-----------+--------------------+---------+------+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+
| 187729 | site_com | localhost | site_com | Query | 2 | Sending data | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) LEFT JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (436695) AND (
wp_posts.ID NOT IN (
SELECT object_id
FROM wp_term_relationships
WHERE term_taxonomy_id IN (30)
)
AND
wp_term_relationships.term_taxonomy_id IN (206,506,636,637,801,4237,4646,4647,4648)
) AND (
wp_postmeta.post_id IS NULL
OR
( mt1.meta_key = '_Original Post ID' AND mt1.meta_value = 'deleted' )
) 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, 45 | 0.000 |
| 187742 | site_com | localhost | site_com | Query | 1 | Sending data | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) LEFT JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (289150) AND (
wp_posts.ID NOT IN (
SELECT object_id
FROM wp_term_relationships
WHERE term_taxonomy_id IN (30)
)
AND
wp_term_relationships.term_taxonomy_id IN (79,308,674)
) AND (
wp_postmeta.post_id IS NULL
OR
( mt1.meta_key = '_Original Post ID' AND mt1.meta_value = 'deleted' )
) 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, 45 | 0.000 |
| 187755 | site_com | localhost | site_com | Query | 8 | Sending data | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) LEFT JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id AND mt1.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (161366) AND (
wp_posts.ID NOT IN (
SELECT object_id
FROM wp_term_relationships
WHERE term_taxonomy_id IN (30)
)
) AND (
( wp_postmeta.meta_key = '_Photo Source Domain' AND wp_postmeta.meta_value = 'www.site1.com' )
AND
(
mt1.post_id IS NULL
OR
( mt2.meta_key = '_Original Post ID' AND mt2.meta_value = 'deleted' )
)
) 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, 9 | 0.000 |
| 187787 | site_com | localhost | site_com | Query | 3 | Sending data | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) LEFT JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id AND mt1.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (442261) AND (
wp_posts.ID NOT IN (
SELECT object_id
FROM wp_term_relationships
WHERE term_taxonomy_id IN (30)
)
) AND (
( wp_postmeta.meta_key = '_Photo Source Domain' AND wp_postmeta.meta_value = 'site2.com' )
AND
(
mt1.post_id IS NULL
OR
( mt2.meta_key = '_Original Post ID' AND mt2.meta_value = 'deleted' )
)
) 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, 9 | 0.000 |
| 187798 | site_com | localhost | site_com | Query | 2 | Sending data | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) LEFT JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id AND mt1.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (161180) AND (
wp_posts.ID NOT IN (
SELECT object_id
FROM wp_term_relationships
WHERE term_taxonomy_id IN (30)
)
) AND (
( wp_postmeta.meta_key = '_Photo Source Domain' AND wp_postmeta.meta_value = 'www.site1.com' )
AND
(
mt1.post_id IS NULL
OR
( mt2.meta_key = '_Original Post ID' AND mt2.meta_value = 'deleted' )
)
) 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, 9 | 0.000 |
| 187845 | site_com | localhost | site_com | Query | 5 | Sending data | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) LEFT JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id AND mt1.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (160175) AND (
wp_posts.ID NOT IN (
SELECT object_id
FROM wp_term_relationships
WHERE term_taxonomy_id IN (30)
)
) AND (
( wp_postmeta.meta_key = '_Photo Source Domain' AND wp_postmeta.meta_value = 'www.site1.com' )
AND
(
mt1.post_id IS NULL
OR
( mt2.meta_key = '_Original Post ID' AND mt2.meta_value = 'deleted' )
)
) 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, 13 | 0.000 |
| 187901 | site_com | localhost | site_com | Query | 0 | Sending data | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) LEFT JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id AND mt1.meta_key = '_Original Post ID' ) LEFT JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) WHERE 1=1 AND wp_posts.ID NOT IN (159918) AND (
wp_posts.ID NOT IN (
SELECT object_id
FROM wp_term_relationships
WHERE term_taxonomy_id IN (30)
)
) AND (
( wp_postmeta.meta_key = '_Photo Source Domain' AND wp_postmeta.meta_value = 'www.site1.com' )
AND
(
mt1.post_id IS NULL
OR
( mt2.meta_key = '_Original Post ID' AND mt2.meta_value = 'deleted' )
)
) 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, 13 | 0.000 |
+--------+------------------+-----------+--------------------+---------+------+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+
我尝试了一些与Wordpress混淆的功能,我尝试添加post_id_meta_key索引,但这也失败了。大家有什么想法吗?非常感激!!由于该站点和mysql,我的服务器现在的CPU使用率为1000%,平均负载为20-30或更高。
答案 0 :(得分:1)
在我看来,WordPress的设计目的不是要处理数千个帖子。
SQL_CALC_FOUND_ROWS
要求(某种)扫描所有200K行以获取编号。请注意,搜索引擎是如何摆脱很久以前说“ ... of 212,345”的帖子的。也许你也应该。wp_postmeta
的效率低下可以克服。参见https://wordpress.stackexchange.com/questions/248207/simple-sql-query-on-wp-postmeta-very-slow OR
效率低下,请尽量避免。(可能会有更多帮助这些查询的东西。)
答案 1 :(得分:1)
已经有一段时间了,但是通过创建下面的索引,我能够极大地减少与问题中提到的查询非常相似的查询时间:
CREATE INDEX post_id_meta_key ON wp_postmeta (post_id, meta_key(191));
我是通过浏览Github issue comment posted的Yoast插件项目来找到这个的
希望它将在以后帮助其他有类似问题的人。