68

最近、wp_optionsテーブルが少し大きいように見えることに気づきました。これには1161行が含まれ、サイズは約2.1MBです。

クリーンオプションをインストールしました。2010年にプラグインの開発が停止したようですが、それでも機能しました。

孤立している可能性のあるエントリの長いリストがあります。これらを並べ替えて、どれを削除し、どれを保持するかを判断する簡単な方法はありますか?また、これがWebサイトのパフォーマンスの問題を引き起こす原因になる可能性がありますか?

読んでいただきありがとうございます、どんなアイデアでも大歓迎です!

更新wp_options:Clean Optionsプラグインがリストにいくつかのトランジェントを返しました。これにより、テーブルに数百のトランジェントファイルがあることがわかりました。次のようなものがたくさんあります。

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

等々。私が言ったように、このように見える数百の行があります。それらを捨てるだけで安全ですか?

ありがとう

4

3 に答える 3

151

安全に捨てることができます。Wordpressと一部のプラグインは、必要に応じてトランジェントを再作成します。トランジェントは、多かれ少なかれ、複雑なクエリからの保存された値です。結果はトランジェントとして保存されるため、システムは一般的なクエリを何度も実行する必要はありません。代わりに、トランジェントが存在し、有効期限が切れていない場合は、トランジェントを検索します。もちろん、何か問題が発生しないように、変更を加える前にデータベースのバックアップを作成してください。

すべてをバックアップした後、次のようなmysqlステートメントを実行できます。

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

[編集:コメント提案後、エスケープ文字で修正されたステートメント]

于 2012-08-16T20:32:46.943 に答える
4

トランジェントは再作成されるため、削除できます。一部のプラグインでは、障害状況や設計上の問題が原因で、期限切れのトランジェントが蓄積する可能性があります。これに対処する1つの方法は、現在のトランジェントが機能を実行できるようにしながら、期限切れのトランジェントを削除することです。数日間有効期限が切れたトランジェントのみをパージすると、どのプラグインが古いトランジェントを引き起こしているかを監視し、問題を修正したり問題を報告したりするためのアクションを実行する機会が得られます。

以下は、データベース内のwp * optionテーブルを検索し、1週間以上古くなっている5つの最大の一時オプションを削除します。これにより、プラグインが自分でパージしようとしているオプションを削除するのに十分な時間が与えられます。

#!/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}
于 2016-02-28T19:01:59.303 に答える
0

プラグインDeleteExpiredTransientsをインストールして、データベースを毎日自動的にクリーンアップします。

于 2019-07-29T05:47:57.847 に答える