WordPress : nettoyer les tables wp_options et wp_postmeta

Nous allons aujourd’hui examiner deux tables importantes de votre base de donnĂ©es WordPress, wp_options et wp_postmeta.

C’est un domaine qui est souvent nĂ©gligĂ© en ce qui concerne les performances globales de WordPress et de la base de donnĂ©es.

Cela est trĂšs visible sur les sites les plus anciens et les plus gros et peut ĂȘtre la cause des temps de requĂȘte lents sur votre site en raison des donnĂ©es Ă  chargement automatique laissĂ©es par les plugins et les thĂšmes tiers.

Voici quelques conseils pour vérifier, dépanner et nettoyer vos tables wp_options et wp_postmeta.

Que contient la table wp_options ?

La table wp_options contient toutes les données relatives aux options et paramÚtres de votre site WordPress telles que:

  • URL du site, URL de la page d’accueil, adresse Ă©lectronique de l’administrateur, catĂ©gorie par dĂ©faut, publications par page, format d’heure, etc.
  • ParamĂštres pour les plugins, les thĂšmes, les widgets,
  • DonnĂ©es temporairement mises en cache.

La table wp_options contient plusieurs champs :

  • option_id
  • option_name
  • option_value
  • autoload

Le champ qui nous intĂ©resse particuliĂšrement est le champ autoload, qui contient un drapeau qui peut ĂȘtre soit “yes”, soit “no”. Cela contrĂŽle essentiellement si la valeur est chargĂ©e ou non par la fonction wp_load_alloptions().

Les donnĂ©es Ă  chargement automatique sont des donnĂ©es qui sont chargĂ©es sur chaque page de votre site WordPress. L’attribut autoload est dĂ©fini sur «yes» par dĂ©faut pour les dĂ©veloppeurs, mais tous les plugins ne doivent thĂ©oriquement pas charger leurs donnĂ©es sur chaque page.

Le problĂšme que les sites WordPress peuvent rencontrer est celui oĂč la table wp_options contient une grande quantitĂ© de donnĂ©es auto-chargĂ©es. Cependant, la table wp_options n’a pas non plus Ă©tĂ© conçue pour contenir des milliers de lignes.

Combien coûte trop de données autoloadées? Cela peut varier, bien sûr, mais idéalement, vous voulez que la taille de votre ordinateur soit comprise entre 300 Ko et 1 Mo.

Une fois que vous commencez Ă  approcher la plage de 3 Ă  5 Mo ou plus, il existe trĂšs probablement des Ă©lĂ©ments pouvant ĂȘtre optimisĂ©s ou supprimĂ©s du chargement automatique.

Et tout ce qui dĂ©passe 10 Mo doit ĂȘtre traitĂ© immĂ©diatement. Cela ne signifie pas toujours que cela posera un problĂšme, mais c’est un bon point de dĂ©part.

Vérifier la taille totale des données auto-chargées

On peut calculer la taille totale des donnĂ©es auto-chargĂ©es d’un site WordPress en effectuant la requĂȘte suivante sous MySQL:

SELECT SUM(LENGTH(option_value)) as autoload_size FROM wp_options WHERE autoload='yes';Code language: JavaScript (javascript)

La valeur d’autoload_size est exprimĂ©e en octets. Il y a 1024 octets dans un KB et 1024 KB dans un MB. Dans notre cas, 622 138 octets sont donc Ă©gaux Ă  0,62 MB. Donc pour ce site, c’est une bonne taille! Si vous restituez moins de 1 Mo, ne vous inquiĂ©tez pas. Cependant, si le rĂ©sultat Ă©tait beaucoup plus grand, passez Ă  l’Ă©tape suivante.

Trouver les enregistrements les plus gourmands

Pour trouver les enregistrements les plus gourmands en taille, voici la requĂȘte Ă  effectuer:

SELECT 'autoloaded data in KiB' as name, ROUND(SUM(LENGTH(option_value))/ 1024) as value FROM wp_options WHERE autoload='yes'
UNION
SELECT 'autoloaded data count', count(*) FROM wp_options WHERE autoload='yes'
UNION
(SELECT option_name, length(option_value) FROM wp_options WHERE autoload='yes' ORDER BY length(option_value) DESC LIMIT 10)Code language: JavaScript (javascript)

Cela vous donne le top 10 des plus gros enregistrements qui sont chargĂ©s automatiquement sur chaque page. Si vous ravisez un enregistrement qui correspond Ă  un plugin que vous n’utilisez plus, supprimez-le (sauvegardez-le avant!).

Top 10 des plus gros enregistrements

Voici la requĂȘte qui donne les 10 plus gros enregistrements de la table wp_options:

SELECT option_name, length(option_value) AS option_value_length FROM wp_options WHERE autoload='yes' ORDER BY option_value_length DESC LIMIT 10;Code language: PHP (php)

Il ne vous reste plus qu’Ă  vĂ©rifier que ces enregistrements appartiennent bien Ă  des plugins actifs sur votre installation WordPress. Si ce n’est pas le cas, supprimez-les (faites une sauvegarde avant!).

Que contient la table wp_postmeta?

La table wp_postmeta est un cas particuliĂšrement dĂ©licat: elle n’a pas de lignes Ă©videntes Ă  effacer, comme wp_posts (rĂ©visions) ou wp_options (transitoires). Mais dans certaines circonstances, elle peut finir par avoir une taille gigantesque.

Les deux dangers de la table wp_postmeta sont importer les restes d’un autre CMS (tel que Blogger, Movable Type, etc) qui peut crĂ©er des doublons dans les enregistrements, et les restes de plugins supprimĂ©s ou dĂ©sactivĂ©s qui ne se sont pas nettoyĂ©s aprĂšs eux-mĂȘmes lors de leur dĂ©sactivation et suppression.

La table wp_postmeta est une table mĂ©ta standard de WordPress. Elle comporte donc un identifiant unique pour la ligne, l’ID de la publication Ă  laquelle la ligne est attachĂ©e et des paires meta_key et meta_value qui ajoutent les mĂ©tadonnĂ©es aux publications, aux pages et aux piĂšces jointes.

Les lignes meta_key sont prĂ©fixĂ©es d’un underscore (pour les paramĂštres secret / par dĂ©faut) et d’aucun underscore (pour les paramĂštres accessibles par l’utilisateur dans le tableau de bord de l’administrateur), nous devons donc rechercher les deux.

Trouver les enregistrements publics (sans underscore)

SELECT SUBSTRING_INDEX(meta_key, '_', 1) AS `Meta`,
(SUM(LENGTH(meta_id)+LENGTH(post_id)+LENGTH(meta_key)+LENGTH(meta_value)))/1048567 AS `Size`, COUNT(*) AS `Count`
    FROM wp_postmeta
    WHERE meta_key NOT LIKE '\_%'
    GROUP BY `Meta`
    ORDER BY `Size` DESC;Code language: JavaScript (javascript)

Trouver les enregistrements privés (avec underscore)

SELECT SUBSTRING_INDEX(meta_key, '_', 2) AS `Meta`, 
(SUM(LENGTH(meta_id)+LENGTH(post_id)+LENGTH(meta_key)+LENGTH(meta_value)))/1048567 AS `Size`, COUNT(*) AS `Count`
    FROM wp_postmeta
    WHERE meta_key LIKE '\_%'
    GROUP BY `Meta`
    ORDER BY `Size` DESC;Code language: JavaScript (javascript)

Un peu de ménage

Lorsque vous lancez les deux requĂȘtes ci-dessus, il suffit de regarder la derniĂšre date d’utilisation de la meta_key en question.

Un exemple concret : si vous avez utilisĂ© WooCommerce il y a deux ans et que vous ne l’utilisez plus sur votre site, vous aurez trĂšs certainement Ă  nettoyer toutes les clĂ©s de WooCommerce ainsi que toutes les clĂ©s des fiches produits.

Si vous avez besoin d’un professionnel pour prendre en charge le nettoyage de votre site WordPress en toute sĂ©curitĂ©, contactez-moi.

Besoin d’un partenaire fiable pour votre projet WordPress/WooCommerce ? Je mets mon expertise Ă  votre service pour des rĂ©sultats concrets.

BĂ©nĂ©ficiez d’un accompagnement personnalisĂ© »

Matt

Développeur certifié WordPress & WooCommerce chez Codeable, administrateur systÚme et enseignant-chercheur, je mets mon expertise au service de vos projets web.

Ma priorité : des sites performants, fiables et sĂ©curisĂ©s, pensĂ©s pour offrir la meilleure expĂ©rience utilisateur. J’accompagne chaque client avec Ă©coute et pĂ©dagogie, pour transformer vos idĂ©es en solutions concrĂštes et durables.

Profitez de solutions WordPress et WooCommerce sur-mesure, pensées pour optimiser durablement votre site.
Explorez les leviers pour booster l’impact de votre site web.

Opinions