W naszym dzienniku wolnych zapytań MySQL narastająco najwolniejsze zapytanie jest prostą aktualizacją wp_postmeta. Oto przykład:
UPDATE `wp_postmeta`
SET `meta_value` = '1392835505:386'
WHERE `post_id` = 94705 AND `meta_key` = '_edit_lock';
Istotne szczegóły dotyczące naszej konfiguracji:
- Czas wolnego zapytania MySQL ustawiony na 1s
- Mechanizm magazynowania wp_postmeta to InnoDB
- Działa w ramach dużej instalacji wielostanowiskowej z dziesiątkami tysięcy postów na głównym blogu WP (gdzie występują takie powolne zapytania)
- Wysoka aktywność w obszarze administracyjnym WP (wielu pisarzy / redaktorów pracuje jednocześnie, ale ogólnie na własnych (nie innych) treściach)
- Niska aktywność po publicznej stronie WP (w rzeczywistości nie wyświetla treści z głównego bloga)
- Wydaje się, że wszystkie wolne zapytania używają klucza „_edit_lock”; zapytania w tym samym formacie (które używają klucza innego niż „_edit_lock”) nie wydają się być wolne.
Dlaczego jest to najwolniejsze zapytanie w naszym systemie? Czy ma to coś wspólnego ze specyficznym użyciem przez WP „blokad edycji”?
Dzięki! :)
Aktualizacja: Dane wyjściowe z mysqlsla poniżej:
______________________________________________________________________ 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
wpisujesz ten wpis? JakSELECT * FROM
wp_postmeta` GDZIEpost_id
= 94705 ANDmeta_key
= '_edit_lock'; `?Odpowiedzi:
_edit_lock jest generowany za każdym razem, gdy edytujesz post lub stronę. składa się z kodu czasowego i użytkownika. więc WordPress wie, kto aktualnie go edytuje.
jeśli manipulujesz nim WordPress reaguje w jakiś sposób wrażliwy ... Próbowałem pobrać, ile sekund ktoś pracował nad postem. Cały czas łamał mi czas ładowania bazy danych.
Tak jak powiedziałeś, uruchamiasz to na dużej witrynie. Nie wiem, ilu użytkowników pisze tam posty, ale na pewno mogłoby to zepsuć pamięć RAM serwera, jeśli wielu osobom edytuje post w tym samym czasie.
Rozwiązaniem może być: pozbyć się _edit_lock
Jak wyłączyć blokadę post / edytuj blokadę?
Zwykle WordPress powinien mieć „_edit_lock” jeden na post. Niektóre bazy danych mają problem z generowaniem ich za każdym razem.
Jak ten facet http://wordpress.org/support/topic/can-i-remove-_edit_lock-_edit_last-from-wp_postmeta
Jego rozwiązaniem było usunięcie ich wszystkich. Aby przyspieszyć, możesz je usuwać co noc o 3 w phpMyAdmin przy pomocy
być może znajdziesz pracę crona, która właśnie to robi.
źródło
Spróbuj tego :)
źródło