WPML
Statut
Résolu
Résolu dans
2.3.8

Aperçu de l’anomalie

À partir de la version 2.3.0 de l’extension WPML Traduction des médias, il est possible de traduire et de synchroniser les médias entre les traductions.

Dans le cadre du processus de configuration (qui s’exécute également lorsque vous migrez depuis une version antérieure), WPML Media analyse l’ensemble du site à la recherche des URL de médias utilisées dans le contenu.

Le marquage des articles qui contiennent des médias est utile par la suite afin que, lors de certains événements liés à la traduction des médias (comme la traduction d’un article de média spécifique), seuls les articles qui incluent réellement des médias soient analysés dans le but de mettre à jour le contenu avec les médias traduits.

Cependant, pour les très grands sites, le processus de configuration peut exercer une certaine pression sur la base de données, ce qui rend l’ensemble du processus plus lent que prévu.

En grande partie, cette charge est causée par les requêtes nécessaires pour identifier les ID des pièces jointes à partir des URL. Normalement, l’ID de la pièce jointe peut être déterminé à partir des attributs d’une balise HTML (par exemple, id=”attachment_8” – ici, 8 est l’ID de la pièce jointe). Lorsqu’un tel attribut n’est pas utilisé, WPML Media détermine l’ID à partir de l’URL elle-même. Dans ce cas, deux types de requêtes sont utilisés :

  • Une requête qui cherche une correspondance dans le champ ‘guid’ de la table wp_posts
  • Une autre requête qui cherche une correspondance dans les champs meta_value de la table wp_postmeta.

Cependant, aucun de ces champs de table n’est indexé par défaut. Puisqu’il s’agit d’une correspondance de texte (même si ce n’est pas une recherche partielle de texte), cela peut s’avérer lent pour les grandes bases de données.

Solution de contournement

Une façon de contourner ce problème consiste à ajouter (au moins temporairement) des index pour ces champs.
Vous pouvez le faire à l’aide de deux requêtes SQL telles que les suivantes :

ALTER TABLE `wp_posts` ADD INDEX `guid` (`guid`); ALTER TABLE `wp_postmeta` ADD INDEX `meta_value` (`meta_value`(512));

Ces ajouts ne devraient avoir aucun effet secondaire sur votre base de données, si ce n’est d’augmenter légèrement sa taille physique sur le disque. Si vous préférez les annuler après avoir exécuté la configuration de WPML Média, vous pouvez le faire à l’aide des deux requêtes MySQL suivantes :

ALTER TABLE `wp_posts` DROP INDEX `guid`; ALTER TABLE `wp_postmeta` DROP INDEX `meta_value`;

Remarque : le préfixe wp_ des tables mentionnées dans les requêtes peut différer selon votre configuration de WordPress. En général et par défaut, il s’agit de wp_

Exemple d’étude de cas : sur un site comprenant environ 140 000 pièces jointes et environ 5 000 articles, la configuration peut prendre plus de 30 minutes pour se terminer. Après l’ajout des index, la configuration s’exécute en quelques minutes. Les tests ont été réalisés sur un environnement de développement classique. Ces valeurs peuvent être encore plus favorables sur un véritable serveur de production.

Toutes les anomalies connues →