Вопрос по mysql, database, wordpress, wordpress-plugin – Могу ли я удалить переходные процессы в таблице wp_options моей установки WordPress?

51

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

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

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

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

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

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

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

Спасибо

Может быть, мы можем начать (таблицу) список плохих плагинов, чтобы прикрепить к этому вопросу? Известно, что плагины затопляют wp_options. Первый в списке - «Вспышка» плагин, который добавляет иконки для социальных сетей. Записи выглядят так: «_transient_flare» Только что удалил 353611 строк (1 Гб) этого барахла из одного блога, который заполнил кэш InnoDB. PJ Brunet

Ваш Ответ

2   ответа
2

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

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

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

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

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

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

я добавилAND option_value < {$time}; чтобы убедиться, что я удалил старые переходные процессы.
Я бы трижды проголосовал за этот ответ, если бы мог - спасибо!
следует использовать префикс $ wpdb->, а не wp_, чтобы он работал с любыми опциями wordpress db .. или даже с $ wpdb-> и заменял все
'%\_transient\_%', Не забывайте, что_ является односимвольнымwildcard.

Похожие вопросы