In unserem MySQL-Protokoll für langsame Abfragen ist die kumulativ langsamste Abfrage ein einfaches Update von wp_postmeta. Hier ist ein Beispiel:
UPDATE `wp_postmeta`
SET `meta_value` = '1392835505:386'
WHERE `post_id` = 94705 AND `meta_key` = '_edit_lock';
Relevante Details zu unserem Setup:
- Die langsame Abfragezeit von MySQL ist auf 1s eingestellt
- Die Speicher-Engine von wp_postmeta ist InnoDB
- Wird in einer großen Multisite-Installation mit Zehntausenden von Posts im Haupt-WP-Blog ausgeführt (wo diese langsamen Abfragen auftreten).
- Hohe Aktivität im WP-Administrationsbereich (viele Autoren / Redakteure arbeiten gleichzeitig, aber im Allgemeinen für ihre eigenen (nicht für andere) Inhalte)
- Geringe Aktivität auf der öffentlichen Seite von WP (keine Inhalte aus dem Hauptblog bereitstellen)
- Die langsamen Abfragen scheinen alle den Schlüssel "_edit_lock" zu verwenden. Abfragen desselben Formats (die einen anderen Schlüssel als "_edit_lock" verwenden) scheinen nicht langsam zu sein.
Warum ist dies die langsamste Abfrage auf unserem System? Hat dies etwas mit der spezifischen Verwendung von "Bearbeitungssperren" durch WP zu tun?
Vielen Dank! :) :)
Update: Ausgabe von mysqlsla unten:
______________________________________________________________________ 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
diesen Eintrag haben? WieSELECT * FROM
wp_postmeta` WHEREpost_id
= 94705 ANDmeta_key
= '_edit_lock'; `?Antworten:
Der _edit_lock wird jedes Mal generiert, wenn Sie einen Beitrag oder eine Seite bearbeiten. Es besteht aus dem Timecode und dem Benutzer. WordPress weiß also, wer es gerade bearbeitet.
Wenn du es manipulierst, reagiert WordPress irgendwie empfindlich ... Ich habe versucht herauszufinden, wie viele Sekunden jemand an einem Beitrag gearbeitet hat. Die ganze Zeit hat es meine Datenbankladezeit unterbrochen.
Wie Sie sagten, führen Sie dies auf einer großen Multisite aus. Ich weiß nicht, wie viele Benutzer dort Beiträge schreiben, aber es könnte definitiv den RAM des Servers beschädigen, wenn zu viele Leute gleichzeitig einen Beitrag bearbeiten.
Eine Lösung könnte sein: _edit_lock loswerden
Wie deaktiviere ich die "Nachsperre / Bearbeitungssperre"?
Normalerweise sollte WordPress das "_edit_lock" pro Post haben. Einige Datenbanken haben das Problem, sie jedes Mal zu generieren.
Wie dieser Typ http://wordpress.org/support/topic/can-i-remove-_edit_lock-_edit_last-from-wp_postmeta
Seine Lösung bestand darin, sie alle zu löschen. Um es zu beschleunigen, können Sie sie alle jede Nacht um 3 Uhr in phpMyAdmin mit löschen
Vielleicht finden Sie einen Cron-Job, der genau das tut.
quelle
Versuche dies :)
quelle