En nuestro registro de consultas lentas de MySQL, la consulta más lenta acumulativa es una simple actualización de wp_postmeta. Aquí hay un ejemplo:
UPDATE `wp_postmeta`
SET `meta_value` = '1392835505:386'
WHERE `post_id` = 94705 AND `meta_key` = '_edit_lock';
Detalles relevantes sobre nuestra configuración:
- MySQL tiempo de consulta lento establecido en 1s
- El motor de almacenamiento de wp_postmeta es InnoDB
- Se ejecuta dentro de una gran instalación multisitio con decenas de miles de publicaciones en el blog principal de WP (donde se producen estas consultas lentas)
- Alta actividad en el área de administración de WP (muchos escritores / editores que trabajan simultáneamente, pero generalmente en su propio contenido (no el de otros))
- Baja actividad en el lado público de WP (en realidad no se publica contenido del blog principal)
- Las consultas lentas parecen estar usando la tecla "_edit_lock"; Las consultas del mismo formato (que usan una clave distinta de "_edit_lock") no parecen ser lentas.
¿Por qué es esta la consulta más lenta en nuestro sistema? ¿Tiene algo que ver con el uso específico de WP de "bloqueos de edición"?
¡Gracias! :)
Actualización: Salida de mysqlsla a continuación:
______________________________________________________________________ 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
esta entrada? ComoSELECT * FROM
wp_postmeta` WHEREpost_id
= 94705 ANDmeta_key
= '_edit_lock'; `?Respuestas:
_edit_lock se genera cada vez que edita una publicación o página. Consiste en el código de tiempo y el usuario. para que WordPress sepa quién lo está editando actualmente.
si lo manipulas WordPress reacciona de alguna manera sensible ... Traté de recuperar la cantidad de segundos que alguien trabajó en una publicación. Todo el tiempo rompió el tiempo de carga de mi base de datos.
Como dijiste, estás ejecutando esto en un gran multisitio. No sé cuántos usuarios escriben publicaciones allí, pero definitivamente podría romper la RAM del servidor si muchas personas editan una publicación al mismo tiempo.
Una solución podría ser: deshacerse de _edit_lock
¿Cómo deshabilitar el "Bloqueo posterior / Editar bloqueo"?
Normalmente WordPress debería tener el "_edit_lock" uno por Post. Algunas bases de datos tienen el problema de generarlas cada vez.
Al igual que este tipo http://wordpress.org/support/topic/can-i-remove-_edit_lock-_edit_last-from-wp_postmeta
Su solución fue eliminarlos a todos. Para acelerarlo, puede eliminarlos todas las noches a las 3 en punto en phpMyAdmin con
podría ser que encuentres un trabajo cron haciendo exactamente eso.
fuente
prueba esto :)
fuente