我可以删除我的WordPress安装的wp_options表中的瞬态?

我最近注意到,我的wp_options表似乎有点大。 它包含1161行,大小约2.1mb。

我已经安装了清洁选项 。 在2010年,插件似乎停止了发展,但仍然做了这项工作。

我现在有一个可能的孤儿条目很长的名单。 是否有一个简单的方法去分类这些,并找出哪些要删除和保留? 此外,这可以负责造成网站的性能问题?

感谢您的阅读,欢迎任何想法!

更新 :清理选项插件返回列表中的一些瞬变,这导致我发现在wp_options表中有几百个瞬态文件。 有一大堆看起来像:

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

等等。 就像我说的,有几百行看起来像这样。 转储它们是否安全?

谢谢

你可以安全地转储它们。 WordPress和一些插件将根据需要重新创build瞬变。 瞬态或多或less是来自复杂查询的存储值。 结果被保存为一个瞬态,以便系统不必一遍又一遍地执行一个常见的查询,而只是查找是否存在并且没有过期的瞬态。 当然,在进行更改之前先备份数据库,以免出现问题!

把所有东西都备份完后,你可以像这样运行一个mysql语句:

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

[ 编辑:转义字符修改后,评论build议]

您可以删除瞬态,因为他们将被重新创build。 由于故障情况或某些插件的devise问题,可能会出现过期瞬变的累积。 解决这个问题的一个方法就是消除过期的瞬变,同时允许现有的瞬变执行其function。 只清除过期几天的瞬态,可以让您有机会监视哪些插件导致过时的瞬变,并采取任何措施解决问题或报告问题。

以下将find数据库中的任何wp *选项表,并删除超过一周陈旧的五个最大瞬态选项。 这给了任何插件足够长的时间来删除他们将要清除的选项。

 #!/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}