Вопрос или проблема
У меня есть этот SQL-запрос, который выполняется каждый раз на моем сайте и занимает от 1 до 2 секунд на выполнение, из-за чего мой сервер зависает. Что это и как это удалить?
SELECT meta_value FROM wp_sitemeta WHERE meta_key = 'wp_installer_network' AND site_id = 1
Мой сайт является многосайтовым и многоязычным. Спасибо
Что это?
Это, скорее всего, часть WPML. Это основано на быстром копировании и вставке wp_installer_network
в поисковую строку github.
Также есть небольшая вероятность, что это плагин Types, но вы упомянули, что у вас установлен многоязычный плагин.
Ссылок на wp_installer_network
в самом WordPress не найдено.
И как это удалить?
Вам нужно будет спросить об этом в сообществе WPML, но самый простой способ — деактивировать WPML. Если вы хотите сохранить WPML, но все же решить проблему, вам нужно будет спросить об этом в сообществе WPML, так как вопросы о сторонних плагинах здесь не в теме.
Старый вопрос, но это может быть полезно для кого-то.
У меня были похожие проблемы с этим запросом, который был действительно медленным. Для меня это было связано с тем, что WPML заполнил wp_sitemeta 650k строками одного и того же значения.
Проблема для меня была связана с тем, что WPML пытался проверить мой ключ сайта, что не удалось, потому что год назад я сменил субдомен для моего сайта. Каждый раз, когда он пытался проверить, он добавлял значения в таблицу sitemeta.
Пример для пояснения:
До смены домена
- Оригинальное имя сайта subdomain1.example.com
- В панели управления WPML я добавил этот домен и получил ключ сайта.
- Я добавил ключ на свой сайт.
- Подтверждение прошло успешно
После смены домена
- Я обновил домен моего сайта на subdomain2.example.com, но не обновил домен в панели управления WPML.
- Теперь я использую “неправильный” ключ. subdomain2 использует ключ, выданный WPML для subdomain1.
- Подтверждение не удалось
Как решить
- Удалите старый домен в WPML и добавьте новый домен.
- Используйте новый ключ для активации WPML.
- Удалите все дублирующиеся значения, созданные WPML в таблице sitemeta.
Ответ или решение
Проблема с SQL-запросом в WordPress и способы ее решения
Ваша проблема заключается в медленном выполнении SQL-запроса на выборку данных из таблицы wp_sitemeta
, который, с точки зрения производительности, негативно сказывается на вашем сервере и, как следствие, на работе вашего сайта. Рассмотрим подробнее причины медленной работы данного запроса и возможные способы решения.
Причина проблемы
Запрос:
SELECT meta_value FROM wp_sitemeta WHERE meta_key = 'wp_installer_network' AND site_id = 1;
Этот запрос может выполняться долго по нескольким причинам:
-
Большое количество записей в таблице: Как было указано в одном из комментариев, у вас может накапливаться большое количество дубликатов записей в таблице
wp_sitemeta
. Если в вашем случае их количество превышает несколько сотен тысяч — это может существенно замедлить выполнение запросов. -
Повторяющиеся значения: Плагины, такие как WPML (мультиязычное решение для WordPress), могут добавлять записи в
wp_sitemeta
при каждой ошибке верификации. Это может происходить, если вы изменили домен вашего сайта и старая версия ключа больше не работает. -
Отсутствие индексов: Если поле
meta_key
не индексировано, скорость выполнения запроса может значительно замедлиться, особенно с увеличением объема данных.
Решение проблемы
Есть несколько подходов к решению этой проблемы:
-
Оптимизация БД:
- Проверьте таблицу
wp_sitemeta
на наличие дубликатов. Вы можете использовать запрос для поиска повторяющихся значений:SELECT meta_key, COUNT(*) FROM wp_sitemeta GROUP BY meta_key HAVING COUNT(*) > 1;
- После этого можно удалить дубликаты с помощью соответствующих SQL-запросов или инструментов для управления базами данных.
- Проверьте таблицу
-
Обновление настроек WPML:
- Если вы недавно изменили домен, убедитесь, что вы обновили настройки в WPML. Перейдите в панель управления WPML и удалите старое доменное значение, добавив новое. Это может помочь останавить создание новых записей, связанных со старыми ключами.
-
Добавление индексов:
- Проверьте, индексировано ли поле
meta_key
. Если нет, добавление индекса может значительно ускорить выполнение запросов.ALTER TABLE wp_sitemeta ADD INDEX (meta_key);
- Проверьте, индексировано ли поле
-
Отключение WPML:
- Если проблема не решается, вы можете рассмотреть временное отключение WPML, чтобы понять, влияет ли данный плагин на производительность сайта. Однако имейте в виду, что это может отразиться на мультиязычных функциях вашего сайта.
-
Кэширование результатов:
- Используйте кэширование на уровне базы данных или приложения, чтобы избежать повторных вызовов одного и того же SQL-запроса. Это существенно снизит нагрузку на сервер.
-
Перенос на более мощный хостинг:
- Если ваши ресурсы исчерпаны, возможно, стоит рассмотреть возможность перехода на более производительное хостинг-решение.
Заключение
Чтобы решить проблему с медленным SQL-запросом в WordPress, важно выявить основную причину и применить соответствующие меры. Убедитесь, что у вас есть резервные копии данных перед внесением изменений в базу данных, и если вы не уверены в своих действиях, не стесняйтесь обратиться к специалисту. Настоянные оптимизации не только улучшат производительность вашего сайта, но и повысят удовлетворенность пользователей.