Al comienzo de cada página servida por WordPress, hay una llamada de MySQL para buscar opciones:
SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes';
Debido a que no hay índice en la autoload
columna, MySQL tiene que buscar TODAS las filas.
También me encontré con el comentario de esta respuesta diciendo que no habría ganancia de rendimiento incluso si hubiera un índice.
En mi solicitud, utilicé muchos valores transitorios para servir como reemplazo de sesión. Funcionaron muy bien y tengo mis propias rutinas de recolección de basura. Noté que en la wp_options
tabla, todos mis valores transitorios (los que comienzan con _transient_
) tienen autoload=no
. Espero que el número de filas de mi wp_options
tabla aumente a medida que aumenta el número de usuarios simultáneos.
Me gustaría saber por qué la mesa está diseñada de esta manera. ¿Y debo crear un índice para mi caso particular?
fuente
autoload
columna.wp_options.autoload
. Fuentes: make.wordpress.org/core/2019/10/15/… ... y ... core.trac.wordpress.org/ticket/24044#comment:87 ... Felicitaciones a @DanBUK que propuso esta función en 2013.Estoy ejecutando 3 blogs WP en una instancia grande de Debian Squeeze y estaba investigando por qué mysql estaba atascado en ese host con un uso de CPU del 200% y una carga del sistema entre 3 y 6. Mirando una 'lista de procesos de show' dentro de mysql, entendimos el La tabla wp_option estuvo involucrada en este problema, así que ejecutamos:
Después de esta operación, la carga mysql como se muestra en la parte superior cayó drásticamente al 1% y el promedio de carga de la instancia ahora es 0.10.
Estamos utilizando algunos complementos, por lo que podría haber un bucle en algún lugar del código, y esta podría ser una situación particular, pero en nuestro caso el cambio en el rendimiento es completamente sorprendente.
Nuestra tabla wp_options tiene 347 filas.
fuente
select *
una vez por todas. En cambio, está consultando cada opción, por eso poner un índice hará una gran diferencia.Si bien @fuxia aceptó detalles de respuesta sobre algunas razones "reclamadas" (la mayoría de las cuales fueron reclamadas por empleados de Automattic en varios tickets de Trac, etc.), la razón subyacente para que WordPress Core no incluya un índice para las opciones de carga automática dentro de la
wp_options
tabla es que Automattic se preocupó porque afectaría negativamente el rendimiento de las bases de datos MySQL que todavía usaban el motor MyISAM.Específicamente, señalaron que el sitio web de WordPress.org era una base de datos muy antigua / compleja, como un sitio web de ejemplo cuyo rendimiento se vería afectado por dicho índice.
Casi todas las otras razones para no agregar el índice durante los últimos 9 años (sí, desde 2010 en el caso del boleto Trac # 14258 y desde 2013 en el caso del boleto Trac # 24044 ) fueron repetidamente probadas incorrectas por docenas de miembros del Comunidad de WordPress, sin embargo, los empleados de Automattic involucrados repetidamente ignoraron varias pruebas de referencia independientes y volvieron a mencionar las preocupaciones de MyISAM.
Afortunadamente, a fines de 2019 con PHP 7.2 ahora la versión "predeterminada" recomendada por WordPress Core, y con el motor InnoDB ahora predeterminado en versiones de MySQL después de 5.5 , y con la presión continua de varios desarrolladores, incluido @DanBUK, que se mantuvo en el tema durante años , Automattic finalmente cedió y decidió agregar el índice de carga automática a partir de WordPress 5.3+ en noviembre de 2019.
Nosotros en LittleBizzy habíamos lanzado el primer complemento conocido que agregaba automáticamente el índice si no existía, que todavía está disponible en GitHub y se descarga regularmente. Tenga en cuenta que ya NO necesita instalar dichos complementos en su pila de WordPress si está ejecutando WP Core 5.3 + ...
fuente