Очень долгое выполнение meta_form()
На сайте WooCommerce и 55 тыщ товаров. Используются кастомные поля в товарах. База весит 500Мб. Всё достаточно шустренько работает, кроме одной траблы - редактирование (и создание нового) поста, товара, страницы - занимает в среднем 30-35 секунд.
Поставил Query monitor - тот сообщает, что самое жрущее - это системный процесс meta_form()
Вот тут: https://9seeds.com/wordpress-admin-post-editor-performance/ сообщается, что якобы можно заюзать фильтры, однако, если я правильно понимаю, эти решения отрубят кастомные поля.
Порекомендовали и это решение: плагин "Add Index To Autoload" - я его поставил, но ничего не изменилось.
В общем, тут мои знания заканчиваются, я даже не знаю, что делать.
Обращаюсь к коллективнму разуму.
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
Решено следующим образом.
- Установлен плагин "Add Index To Autoload"
- SQL-запросом к базе (сначала создать копию базы) добавляем индексацию в таблице got_postmeta для поля meta_key:
CREATE INDEX ix_mk ON got_postmeta(meta_key)
После этого страница редактирования товара стала загруаться менее чем за 2 секунды, а сам запрос, который генерится методом ядра meta_form() - выпал из списка медленных запросов.
Вопрос снят, спасибо людям из чата "Администрирование для веб"
Индекс у ключей в таблице метателей есть по умолчанию. Почему у тебя его не было и кто его удалил надо бы разобраться...
Можно просто отключить этот запрос. Его делает ядро, чтобы получить список произвольных полей для создания дропдауна с их списком внутри метабокса custom fields.
Отрубается так:
Актуально для Classic Editor, так как в Gutenberg этого запроса в таком виде нет.