¿Por qué las actualizaciones simples de "_edit_lock" de wp_postmeta son tan lentas?

10

En nuestro registro de consultas lentas de MySQL, la consulta más lenta acumulativa es una actualización simple 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 en nuestra configuración:

  • El tiempo de consulta lento de MySQL se establece 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 ocurren estas consultas lentas)
  • Alta actividad en el área de administración de WP (muchos escritores / editores trabajan simultáneamente, pero generalmente en su propio contenido (no en el de otros)
  • Baja actividad en el lado público de WP (en realidad no sirve contenido del blog principal)
  • Las consultas lentas parecen estar usando la clave "_edit_lock"; Las consultas del mismo formato (que utilizan 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 "editar bloqueos"?

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';
    
pregunta rinogo 21.02.2014 - 18:04

1 respuesta

2

el _edit_lock se genera cada vez que editas una publicación o página. Consiste en el código de tiempo y el usuario. así que WordPress está sabiendo quién lo está editando actualmente.

meta_id     post_id     meta_key    meta_value
9           5           _edit_lock  1388386997:1

si lo manipulas, WordPress reacciona de alguna manera sensible ... Traté de buscar cuántos segundos trabajó alguien 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 memoria 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 de publicación / Bloqueo de edición" ?

Normalmente, WordPress debería tener el "_edit_lock" uno por publicación. Algunas bases de datos tienen el problema de generarlas cada vez.

Me gusta este chico enlace

Su solución fue eliminarlas todas. Para acelerarlo, puede eliminarlos todos todas las noches a las 3 en punto en phpMyAdmin con

DELETE FROM 'yourdb'.'wp_postmeta' WHERE 'wp_postmeta'.'meta_key' = '_edit_lock'

puede ser que encuentres un trabajo cron haciendo exactamente eso.

    
respondido por el seot 02.04.2014 - 03:25

Lea otras preguntas en las etiquetas