web-dev-qa-db-fra.com

Puis-je supprimer les transitoires dans la table wp_options de mon WordPress?

J'ai récemment remarqué que mon wp_options la table semble être un peu grande. Il contient 1161 lignes et mesure environ 2,1 Mo.

J'ai installé Clean Options . Il semble que le développement s'est arrêté sur le plugin en 2010, mais il a quand même fait le travail.

J'ai maintenant une longue liste d'entrées potentiellement orphelines. Existe-t-il un moyen simple de les trier et de déterminer lesquels supprimer et lesquels conserver? En outre, cela pourrait-il être à l'origine de problèmes de performances avec le site Web?

Merci d'avoir lu, toutes les idées sont les bienvenues!

Mise à jour : Le plugin Clean Options a renvoyé quelques transitoires dans la liste, ce qui m'a amené à découvrir qu'il y a plusieurs centaines de fichiers transitoires dans le wp_options table. Il y a tout un tas qui ressemble à:

  • _site_transient_browser_5728a0f1503de54634b3716638...
  • _site_transient_timeout_browser_03df11ec4fda7630a5...
  • _transient_feed_83dcaee0f69f63186d51bf9a4...
  • _transient_plugin_slugs
  • _transient_timeout_feed_83dcaee0f69f63186d51bf9a4b...

etc. Comme je l'ai dit, il y a plusieurs centaines de lignes qui ressemblent à ceci. Est-il sûr de simplement les vider?

Merci

55
Ryan

Vous pouvez les vider en toute sécurité. Wordpress et certains plugins recréeront les transitoires selon les besoins. Un transitoire est plus ou moins la valeur stockée d'une requête complexe. Les résultats sont enregistrés sous forme de transitoire afin que le système n'ait pas pour effectuer une requête commune encore et encore, au lieu de cela, il recherche juste le transitoire s'il existe et n'a pas expiré. Bien sûr, faites une sauvegarde de votre base de données avant de faire un changement de peur que quelque chose ne tourne mal!

Après avoir tout sauvegardé, vous pouvez exécuter une instruction mysql comme celle-ci:

DELETE FROM `wp_options` WHERE `option_name` LIKE ('%\_transient\_%')

[EDIT: instruction corrigée avec des caractères d'échappement, après suggestion de commentaire]

132
Lane

Vous pouvez supprimer les transitoires car ils seront recréés. Il peut y avoir des accumulations de transitoires expirés en raison de situations d'échec ou de problèmes de conception avec certains plugins. Une façon d'y faire face est de supprimer les transitoires expirés tout en permettant aux courants de remplir leur fonction. La purge uniquement des transitoires expirés depuis quelques jours vous permet de surveiller les plugins entraînant des transitoires périmés et de prendre toute mesure pour résoudre les problèmes ou signaler des problèmes.

Ce qui suit trouvera toutes les tables d'options wp * dans la base de données et supprimera les cinq plus grandes options transitoires qui sont périmées depuis plus d'une semaine. Cela donne suffisamment de temps pour qu'un plugin supprime les options qu'il va purger lui-même.

#!/bin/bash

DBNAME="mydatabase"
DBUSER="${USER}"
DBPASSWD="secret"
MYSQLBIN=/usr/bin/mysql # OR MYSQLBIN=/usr/local/mysql/bin/mysql
MYSQL="${MYSQLBIN} -s -D ${DBNAME} -u ${DBUSER} -p${DBPASSWD}"
TMP=/var/tmp/
ENTRIES_FILE="${TMP}entries.$$"

# Find option tables
for OPTION_TABLE in $( echo 'show tables like "%wp%options";' | ${MYSQL} )
do
    # Find up to five large long expired transients
    ${MYSQL} > ${ENTRIES_FILE} <<EOF
    select option_name from ${OPTION_TABLE} where option_name in
        (select concat("_transient",substr(option_name,19))
            FROM ${OPTION_TABLE} WHERE option_name LIKE '_transient_timeout%' AND
            option_value < UTC_TIMESTAMP() - INTERVAL 1 WEEK order by option_value)
    order by length(option_value) desc limit 5;
EOF
    for OPTION in $( < ${ENTRIES_FILE} )
    do
        echo Deleting ${OPTION} from ${OPTION_TABLE}
        echo delete from ${OPTION_TABLE} where option_name = \"${OPTION}\"\; | ${MYSQL}
        if [[ $? -eq 0 ]]; then
            echo delete from ${OPTION_TABLE} where option_name = \"_transient_timeout${OPTION:10}\"\; | ${MYSQL}
        fi
    done
done
rm -f ${ENTRIES_FILE}
2
ClearCrescendo

Installez le plugin Supprimer les transitoires expirés pour nettoyer automatiquement la base de données quotidiennement.

0
Jonas Berlin