В нашем журнале медленных запросов MySQL кумулятивно самый медленный запрос представляет собой простое обновление wp_postmeta. Вот пример:
UPDATE `wp_postmeta`
SET `meta_value` = '1392835505:386'
WHERE `post_id` = 94705 AND `meta_key` = '_edit_lock';
Соответствующие подробности о нашей настройке:
- MySQL медленное время запроса установлено в 1 с
- механизм хранения 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';
SELECT * FROM wp_postmeta WHERE meta_key='_edit_lock'
; ?SELECT
эту запись? КакSELECT * FROM
wp_postmeta` WHEREpost_id
= 94705 ANDmeta_key
= '_edit_lock'; `?Ответы:
_edit_lock генерируется каждый раз, когда вы редактируете сообщение или страницу. он состоит из временного кода и пользователя. так что WordPress знает, кто сейчас его редактирует.
если вы им манипулируете, WordPress реагирует как-то чувствительно ... Я пытался узнать, сколько секунд кто-то работал над сообщением. Все время это нарушало время загрузки моей базы данных.
Как вы сказали, вы запускаете это на большом мультисайте. Не знаю, сколько пользователей пишут сообщения там, но это определенно может сломать оперативную память сервера, если многие люди редактируют сообщение одновременно.
Решение может быть таким: избавиться от _edit_lock
Как отключить «Post Lock / Edit Lock»?
Обычно WordPress должен иметь «_edit_lock» один на пост. В некоторых базах данных возникают проблемы при их генерации каждый раз.
Как этот парень http://wordpress.org/support/topic/can-i-remove-_edit_lock-_edit_last-from-wp_postmeta
Его решением было удалить их всех. Чтобы ускорить его, вы можете удалять их каждую ночь в 3 часа в phpMyAdmin с
может быть, вы найдете работу cron, которая делает именно это.
источник
попробуй это :)
источник