Comment réduire la taille utilisée par _wp_attachment_metadata sur WordPress ?

_wp_attachment_metadata peut être l’une des métadonnées les plus gourmands sur WordPress. Elle se situe dans la table wp_postmeta et concerne les médias dans WordPress. Voici comment optimiser sa taille.

Que contient _wp_attachment_metadata ?

_wp_attachment_metadata contient les métadonnées associées à votre image dans un format sérialisé pour se permettre d’être stocké dans un champ « string » (texte).

Pour constater la taille utilisée par ce dernier, vous pouvez exécuter la requête SQL suivante sur votre base de données (depuis phpMyAdmin par exemple) :

SELECT SUM(LENGTH(meta_value)) as meta_size FROM wp_postmeta WHERE meta_key = '_wp_attachment_metadata';

À noter que la valeur indiquée est en octets. Ce type de métadonnées ne devrait être disponible que pour les posts de type « attachment », autrement dit que les médias. Cela se vérifie assez facilement avec la requête SQL suivante :

SELECT wp_posts.post_type, meta_key FROM wp_postmeta INNER JOIN wp_posts ON wp_posts.ID = wp_postmeta.post_id WHERE meta_key = '_wp_attachment_metadata' GROUP BY wp_posts.post_type;

Vous ne devriez alors voir qu’un seul post_type qui est attachment.

Prenons maintenant une ligne au hasard :

SELECT meta_key, meta_value FROM wp_postmeta WHERE meta_key = '_wp_attachment_metadata' ORDER BY RAND() LIMIT 0,1;

Si nous regardons son contenu, nous verrons que celui-ci contient entre autres :

  • Les métadonnées EXIF de l’image (modèle de caméra, paramètres de la prise …)
  • Les miniatures existantes et leurs tailles

Comment réduire la taille de _wp_attachment_metadata ?

Réduire la quantité d’images sur le site

Cela ne vient pas forcément à l’esprit, mais plus il y a d’images, plus il y aura de métadonnées d’images. L’action le plus simple et de supprimer les médias inutilisés sur votre site web. Le plugin Media Cleaner est justement là pour effectuer cette tâche.

Réduire la quantité de miniatures sur votre site

Étant donné que chaque format de miniature rajoute des données pour chaque image sur _wp_attachment_metadata, réduire la quantité de miniatures vous aidera également à réduire les données.

Pour commencer, vous pouvez lister les formats de miniatures existantes sur votre site grâce à WP-CLI (disponible en ligne de commande) :

wp media image-size

Commencez alors par identifier les formats et leur origine : thème ou plugin. En effet, vous allez devoir faire un peu de recherche pour savoir quel plugin ou quel thème a introduit ce format de miniature.

Le plugin ou le thème aura à utiliser la fonction WordPress add_image_size() pour effectuer cette action, vous pourrez alors rechercher les fichiers PHP utilisant cette commande pour constater les plugins et thèmes impliqués. Vous pouvez donc utiliser la commande « grep » pour rechercher rapidement ces fichiers :

cd /home/monsite/public_html/wp-content
grep -r -H 'add_image_size'

(assurez-vous de remplacer « /home/monsite/public_html » par la racine de votre site web)

Désactivez et supprimez ensuite le plugin et/ou le thème de votre site web pour supprimer ce format de miniature, et regénérez vos miniatures avec WP-CLI :

wp media regenerate --yes

IMPORTANT !!! Cette commande prendra plusieurs minutes, voire plusieurs heures pour s’exécuter, et sera gourmand en ressources CPU.

Supprimer les données EXIF de vos images

Vous pouvez aussi supprimer vos données EXIF de vos images pour réduire la taille de la métadonnée _wp_attachment_metadata.

Malheureusement, je n’ai aujourd’hui retrouvé aucun outil pour appliquer cela sur les images déjà existantes sur votre site. Je ne pourrais que vous conseiller de supprimer ces informations en amont, avant d’ajouter l’image sur le site. Vous pouvez faire cela avec votre éditeur de photo (Photoshop, Paint.NET, …) ou avec ce genre d’outil en ligne : verexif.com.

Conclusion

Si vous avez un problème avec _wp_attachment_metadata, c’est sûrement que votre site web contient beaucoup d’images et/ou votre thème et vos plugins demandent à ce que WordPress génère beaucoup de miniatures.

Un nettoyage de cette métadonnée allègera votre table wp_postmeta et améliorera vos performances, toutefois si vous n’avez pas la possibilité de réduire cela et que cela vous pose un problème, il sera nécessaire d’envisager un serveur MySQL (et donc probablement une formule d’hébergement web) avec plus de ressources.

Laisser un commentaire