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

40

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

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

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

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

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

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

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

Спасибо

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

2 ответа

110
Лучший ответ

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

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

DELETE FROM `wp_options` WHERE `option_name` LIKE ('%\_transient\_%')
Оператор

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

  • 16
    '%\_transient\_%' . Не забывайте, что _ является односимвольным символом подстановки .
  • 3
    Я бы трижды проголосовал за этот ответ, если бы мог - спасибо!
Показать ещё 2 комментария
1

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

Ниже перечислены таблицы параметров 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}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню