MySQLのスロークエリログでは、累積的に最も遅いクエリはwp_postmetaの単純な更新です。これが例です:
UPDATE `wp_postmeta`
SET `meta_value` = '1392835505:386'
WHERE `post_id` = 94705 AND `meta_key` = '_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';
投稿またはページを編集するたびに_edit_lockが生成されます。タイムコードとユーザーで構成されています。そのため、WordPressは現在誰が編集しているのかを知っています。
meta_id post_id meta_key meta_value
9 5 _edit_lock 1388386997:1
あなたがそれを操作するならば、WordPressはどういうわけか敏感に反応します...私は誰かが投稿に取り組んだ何秒を取得しようとしました。それは私のデータベースのロード時間を壊していました。
あなたが言ったようにあなたは大規模なマルチサイトでこれを実行しています。何人のユーザがそこに投稿を書いているのかわからないが、多くの人が同時に投稿を編集すると、間違いなくサーバのRAMを壊す可能性がある。
解決策は次のとおりです。_edit_lockを取り除きます
"Post Lock/Edit Lock"を無効にするには?
通常WordPressはPostごとに "_edit_lock"を1つ持つべきです。データベースによっては毎回それらを生成する問題があります。
この男のように http://wordpress.org/support/topic/can-i-remove-_edit_lock-_edit_last-from-wp_postmeta
彼の解決策はそれらすべてを削除することでした。それをスピードアップするためにあなたはphpMyAdminで3時に毎晩それらをすべて削除することができます
DELETE FROM `yourdb`.`wp_postmeta` WHERE `wp_postmeta`.`meta_key` = '_edit_lock'
あなたはまさにそれをしているcronの仕事を見つけるかもしれません。