Таблица WP_Options бесконечно увеличивается в размере.

Вопрос или проблема

У меня есть проблема с моей страницей на wordpress (магазин woocommerce, родительская тема woodmart), где таблица wp_options в моей базе данных увеличивается почти на 50 МБ по размеру, как я думал, примерно каждые 10 минут, но оказывается, интервал совершенно случайный, вчера в течение дня это было примерно 10 минут, но вечером — каждый час или около того.

Несколько дней назад, когда я это заметил, она достигла рекорда в 140 ГБ, и продолжала бы расти. Оптимизация таблицы решает проблему на некоторое время и снижает ее до 300 МБ, но она медленно снова увеличивается после случайного промежутка времени.

Эта проблема сохраняется на 2 веб-сайтах, которые у меня есть. 1. работающий магазин woocommerce (это был тот с базой данных 140 ГБ, до оптимизации) и 2. новая версия того же магазина в разработке (у него размер таблицы составлял 25 ГБ, когда я его обнаружил.)

Итак, следующие данные касаются моей страницы разработки:

Я оптимизировал 25 ГБ базу данных, снизил ее до около 200 МБ, и за 6 часов она достигла 1,3 ГБ.

Я проверил журнал активности WP и ничего не нашел, когда она увеличивалась на 50-100 МБ случайно.

Я также проверил WP cron, и, похоже, проблема не в заданиях cron. Она увеличивалась, когда никаких заданий cron не работало, и после выполнения нескольких, которые, как я думал, могут быть ответственны, никаких изменений не произошла.

В SQL, если я выполню:

SELECT COUNT(*) AS row_count, SUM(LENGTH(option_value)) AS total_data_size, AVG(LENGTH(option_value)) AS avg_row_size FROM wp_options;

возвращает:
row_count: 15749
total_data_size: 5610091
avg_row_size: 356.2189

Так что согласно этому, мой средний размер строки составляет 300 байт, а общий размер wp_options должен быть 5.6 МБ.

Но если я выполню SHOW TABLE STATUS, я получаю такой результат:

Атрибут Значение Анализ
Строки 15,565 Соответствует приблизительному количеству строк, упомянутому ранее.

Avg_row_length 74,677 байт Каждая строка в среднем составляет ~74.6 КБ..

Data_length 1,162,362,880 Это общая величина данных (~1.16 ГБ).

Index_length 3,129,344 Размер индексов минимален (~3 МБ), поэтому индексы не являются значительным источником утечек памяти.

Data_free 6,291,456 Неиспользуемое пространство составляет только ~6 МБ, что означает, что фрагментация минимальна и не является основной причиной размера таблицы.

Row_format Динамический

Таким образом, хотя каждая строка содержит в среднем только 300 байт данных, каждая строка в среднем занимает 75 КБ!

Так что это должно быть простое решение, не так ли? Давайте просто найдем самую большую строку и….

SELECT option_name, LENGTH(option_value) AS option_value_length
FROM wp_options
ORDER BY option_value_length DESC;

Это показывает мне, что самая большая запись option_value_length равна 481491,
но 25-я уже 37280.

Проверяя опции autoload:

SELECT option_name, LENGTH(option_value) AS option_size, autoload FROM wp_options WHERE autoload = ‘yes’ ORDER BY option_size DESC LIMIT 50;

Показывает мне самый большой option_size равный 33749, 6-й уже уменьшился до 7572.

Маловероятно, что проблема заключается в транзитах, потому что при оптимизации моей базы данных она снижалась до около 100 МБ, не удаляя никаких транзитов.

На этом этапе я довольно сильно застрял, собираюсь попробовать отключить дочернюю тему и использовать родительскую, и посмотреть, сохраняется ли проблема… Хотя моя дочерняя тема не должна ничего записывать в wp_options…. У кого-нибудь есть хорошие идеи?

Ответ или решение

Проблема роста размера таблицы wp_options в базе данных WordPress может быть следствием нескольких факторов. Давайте разберем возможные причины и предложим методы их решения, основываясь на предоставленной информации.

Понимание проблемы

Вы наблюдаете ненормальное увеличение размера таблицы wp_options на двух сайтах, что указывает на наличие проблем с сохранением данных. Рост почти до 140 ГБ, оптимизация, которая снижает размер до 300 МБ, и затем снова аварийный рост до нескольких гигабайт в кратчайшие сроки — все это настораживает.

  1. Неправильная отчетность: Вы указываете, что SELECT COUNT(*) AS row_count, SUM(LENGTH(option_value)) показывает размер в 5.6 МБ, тогда как SHOW TABLE STATUS указывает на 1.16 ГБ данных. Эта несостыковка может указывать на наличие большого количества данных с высоким уровнем фрагментации или на проблемы с индексами.

  2. Автозагрузка: Из анализа автозагрузки видно, что самые большие значения не превышают 34 КБ. Это значит, что маловероятно, что автозагружаемые параметры приводят к столь значительному увеличению.

  3. Проверка транзиентов: Вы уверены, что транзиенты не влияют на проблему. Это важно, так как часто транзиенты могут привести к нагромождению данных, если они не очищаются должным образом.

Возможные причины увеличения

  1. Проблемы с плагинами: Некоторые плагины могут добавлять данные в wp_options без надлежащего управления или очистки. Особенно стоит обратить внимание на плагины для кэширования и оптимизации, которые могут неправильно обрабатывать данные.

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

  3. Использование данных: Некоторые темы и плагины могут генерировать временные файлы и массивы, которые хранятся в wp_options. Возможно, стоит проверить код, чтобы определить, вызывает ли это назначение большие объемы данных.

Решения и рекомендации

  1. Проверка плагинов: Деактивируйте плагины по одному и следите за размером таблицы wp_options. Это поможет выявить, какой из них вызывает проблемы.

  2. Оптимизация MySQL: Запустите скрипты оптимизации базы данных и пересоберите индексы. Это может уменьшить уровень фрагментации и улучшить производительность.

  3. Удаление лишних данных: Если у вас есть ненужные префиксы, постоянные данные ненужных плагинов, можно рассмотреть возможность их удаления вручную через SQL-запросы.

  4. Мониторинг активных записей: Установите плагины мониторинга, которые помогут отслеживать изменения в таблице wp_options. Это может дать полезную информацию о времени и содержании изменений.

  5. Анализ логов: Проверьте логи сервера и логи базы данных на предмет ошибок и аномалий, которые могут указывать на источники проблемы.

  6. Обновление WordPress: Убедитесь, что ваша версия WordPress, темы и плагины актуальны. Обновления могут решить проблему, если она была известной у разработчиков.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...