- Estado
- Resuelto
- Resuelto en
- 2.3.8
Resumen del problema
A partir de la versión 2.3.0 del plugin WPML Media Translation, es posible traducir y sincronizar medios entre traducciones.
Como parte del proceso de configuración (que también se ejecuta al migrar desde una versión anterior), WPML Media analiza todo el sitio en busca de URL de medios utilizadas en el contenido.
Marcar las entradas que contienen medios es de gran ayuda más adelante, de modo que, en determinados eventos relacionados con la traducción de medios (como la traducción de una entrada de medios específica), solo se analizarán las entradas que realmente incluyan medios para actualizar el contenido con los medios traducidos.
Sin embargo, en sitios muy grandes, el proceso de configuración puede ejercer cierta presión sobre la base de datos, lo que hace que todo el proceso sea más lento de lo esperado.
En su mayor parte, la sobrecarga es causada por las consultas necesarias para identificar los ID de los archivos adjuntos a partir de las URL. Normalmente, el ID del archivo adjunto se puede determinar a partir de los atributos de una etiqueta HTML (p. ej., id=”attachment_8”; aquí, 8 es el ID del archivo adjunto). Cuando no se utiliza dicho atributo, WPML Media determina el ID a partir de la propia URL. En este caso, se utilizan dos tipos de consultas:
- Una consulta que busca coincidencias con el campo ‘guid’ en la tabla wp_posts
- Otra consulta que busca coincidencias con los campos meta_value de la tabla wp_postmeta.
Sin embargo, ninguno de los campos de estas tablas está indexado por defecto. Dado que se trata de una coincidencia de texto (incluso si no es una búsqueda de texto parcial), puede resultar lento en bases de datos grandes.
Solución alternativa
Una forma de evitar este problema es añadir (al menos temporalmente) índices para estos campos.
Puede hacerlo usando dos consultas SQL como las siguientes:
ALTER TABLE `wp_posts` ADD INDEX `guid` (`guid`);
ALTER TABLE `wp_postmeta` ADD INDEX `meta_value` (`meta_value`(512));
Estas adiciones no deberían tener ningún efecto secundario en su base de datos, aparte de hacer que el tamaño físico de la base de datos en el disco sea ligeramente mayor. Si prefiere revertirlas después de ejecutar la configuración de WPML Media, puede hacerlo usando las siguientes dos consultas MySQL:
ALTER TABLE `wp_posts` DROP INDEX `guid`;
ALTER TABLE `wp_postmeta` DROP INDEX `meta_value`;
Nota: el prefijo wp_ de las tablas mencionadas en las consultas puede ser diferente según su configuración de WordPress. Por lo general y por defecto, es wp_
Ejemplo de estudio de caso: en un sitio con unos 140.000 archivos adjuntos y unas 5.000 entradas, la configuración puede tardar más de 30 minutos en completarse. Después de añadir los índices, la configuración se ejecuta en un par de minutos. Las pruebas se realizaron en un entorno de desarrollo normal. Estos valores pueden ser incluso más favorables en un servidor de producción real.