Очень долгое выполнение meta_form()

На сайте WooCommerce и 55 тыщ товаров. Используются кастомные поля в товарах. База весит 500Мб. Всё достаточно шустренько работает, кроме одной траблы - редактирование (и создание нового) поста, товара, страницы - занимает в среднем 30-35 секунд.

Поставил Query monitor - тот сообщает, что самое жрущее - это системный процесс meta_form()

Вот тут: https://9seeds.com/wordpress-admin-post-editor-performance/ сообщается, что якобы можно заюзать фильтры, однако, если я правильно понимаю, эти решения отрубят кастомные поля.

Порекомендовали и это решение: плагин "Add Index To Autoload" - я его поставил, но ничего не изменилось.

В общем, тут мои знания заканчиваются, я даже не знаю, что делать.

Обращаюсь к коллективнму разуму.

Заметки к вопросу:
adward 5.8 лет назад

UPD:
Выяснил (с помощью плагина Query Monitor), что этот запрос выполняется аж 30 секунд:

SELECT DISTINCT meta_key 
FROM got_postmeta 
WHERE meta_key NOT BETWEEN '_'
AND '_z' 
HAVING meta_key NOT LIKE '\\_%' 
ORDER BY meta_key 
LIMIT 30

Решено следующим образом.

  1. Установлен плагин "Add Index To Autoload"
  2. SQL-запросом к базе (сначала создать копию базы) добавляем индексацию в таблице got_postmeta для поля meta_key:
CREATE INDEX ix_mk ON got_postmeta(meta_key)

После этого страница редактирования товара стала загруаться менее чем за 2 секунды, а сам запрос, который генерится методом ядра meta_form() - выпал из списка медленных запросов.

Вопрос снят, спасибо людям из чата "Администрирование для веб"

Kama 5.8 лет назад

Индекс у ключей в таблице метателей есть по умолчанию. Почему у тебя его не было и кто его удалил надо бы разобраться...

0
adward
5.8 лет назад 6
  • 1
    mihdan 444 kobzarev.com

    Можно просто отключить этот запрос. Его делает ядро, чтобы получить список произвольных полей для создания дропдауна с их списком внутри метабокса custom fields.

    Отрубается так:

    add_filter( 'postmeta_form_keys', '__return_false' );

    Актуально для Classic Editor, так как в Gutenberg этого запроса в таком виде нет.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация