it-swarm.com.ru

Могу ли я удалить переходные процессы в таблице wp_options моей установки WordPress?

Недавно я заметил, что моя таблица wp_options кажется немного большой. Он содержит 1161 ряд и имеет размер около 2,1 Мб.

Я установил Чистые параметры . Похоже, что разработка плагина остановилась еще в 2010 году, но он все же сделал свою работу.

Теперь у меня есть длинный список потенциально осиротевших записей. Есть ли простой способ сортировки и определения, что удалить, а что оставить? Кроме того, может ли это быть причиной проблем с производительностью сайта?

Спасибо за чтение, любые идеи приветствуются!

Обновление : плагин Clean Options вернул некоторые переходные процессы в списке, что привело меня к обнаружению, что в таблице wp_options есть несколько сотен временных файлов. Есть целая куча, которая выглядит так:

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

и так далее. Как я уже сказал, есть несколько сотен строк, которые выглядят так. Безопасно ли просто выбросить их?

Спасибо

53
Ryan

Вы можете безопасно сбросить их. Wordpress и некоторые плагины воссоздают переходные процессы по мере необходимости. Переходный процесс - это более или менее сохраненное значение из сложного запроса. Результаты сохраняются как переходные процессы, поэтому системе не нужно выполнять общий запрос снова и снова, вместо этого она просто ищет переходный процесс, если он существует и срок его действия не истек. Конечно, сделайте резервную копию вашей базы данных, прежде чем вносить изменения, чтобы что-то пошло не так!

После создания резервной копии вы можете выполнить инструкцию mysql следующим образом:

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

[EDIT: оператор исправлен с escape-символами, после предложения комментария]

127
Lane

Вы можете удалить переходные процессы, поскольку они будут воссозданы. Могут быть накопления переходных процессов с истекшим сроком действия из-за ситуаций сбоя или проблем проектирования с некоторыми плагинами. Один из способов справиться с этим - удалить просроченные переходные процессы, позволяя текущим выполнять свои функции. Очистка только переходных процессов, срок действия которых истек в течение нескольких дней, дает вам возможность отслеживать, какие плагины приводят к устаревшим переходным процессам, и предпринимать какие-либо действия для устранения проблем или сообщения о проблемах.

Далее будут найдены все таблицы параметров 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}
2
ClearCrescendo