在我们的MySQL慢查询日志中,累积最慢的查询是对wp_postmeta的简单更新。这是一个例子:
UPDATE `wp_postmeta`
SET `meta_value` = '1392835505:386'
WHERE `post_id` = 94705 AND `meta_key` = '_edit_lock';
我们设置的相关详细信息:
- MySQL慢查询时间设置为1s
- wp_postmeta的存储引擎是InnoDB
- 在大型多站点安装中运行,在主WP博客上有成千上万的帖子(发生这些缓慢查询的地方)
- WP管理区域中的活动频繁(很多作家/编辑者同时工作,但通常都是自己(而非他人)的内容)
- WP公开方面的活动较少(实际上并未提供主要博客的内容)
- 缓慢的查询似乎都在使用“ _edit_lock”键;相同格式(使用“ _edit_lock”以外的键)的查询似乎并不慢。
为什么这是我们系统上最慢的查询?它与WP对“编辑锁”的特定使用有关吗?
谢谢!:)
更新:mysqlsla的输出如下:
______________________________________________________________________ 001 ___
Count : 606 (16.83%)
Time : 2257.760468 s total, 3.725677 s avg, 1.00512 s to 84.645869 s max (20.60%)
95% of Time : 1355.289277 s total, 2.357025 s avg, 1.00512 s to 12.343604 s max
Lock Time (s) : 182.502 ms total, 301 μs avg, 29 μs to 157.542 ms max (0.21%)
95% of Lock : 22.882 ms total, 40 μs avg, 29 μs to 57 μs max
Rows sent : 0 avg, 0 to 0 max (0.00%)
Rows examined : 1 avg, 1 to 2 max (0.00%)
Database : xxx_wp
Users :
xxx_wp@localhost : 98.84% (599) of query, 51.03% (1837) of all users
yyy_wp@localhost : 1.16% (7) of query, 0.94% (34) of all users
Query abstract:
SET timestamp=N; UPDATE wp_postmeta SET meta_value = 'S' WHERE post_id = N AND meta_key = 'S';
Query sample:
SET timestamp=1392835506;
UPDATE `wp_postmeta` SET `meta_value` = '1392835505:386' WHERE `post_id` = 94705 AND `meta_key` = '_edit_lock';
感谢您的问题,adrian7!有33k行匹配您的查询。我不熟悉WP对“ _edit_lock”元密钥的用法。这是异常吗?
—
rinogo 2014年
它不是异常,当用户试图编辑相同的帖子/页面时,wordpress会用它来警告用户。我建议您从wp_postmeta中删除所有_edit_locks,显然是在没有人编辑的情况下,并检查性能是否提高。(顺便说一句,先备份)。
—
adrian7
仅当您
—
fischi 2014年
SELECT
输入此条目时,还会花费大量时间吗?就像SELECT * FROM
wp_postmeta` WHERE post_id
= 94705 AND meta_key
='_edit_lock';`?
@fischi:至少在我刚才进行的测试中,该查询似乎需要45-50ms。但是,有可能偶尔会花费很长时间(例如,最多84秒,如问题中包含的mysqlsla输出所示)。我将进行新一轮的慢速查询分析,以查看我最近对配置的任何更改是否影响了查询。
—
rinogo 2014年
SELECT * FROM wp_postmeta WHERE meta_key='_edit_lock'
; ?