Назад | Перейти на главную страницу

Сайт WordPress с медленными запросами (500 тыс. Посетителей в месяц и 150 тыс. Сообщений)

У меня сайт WordPress с 500 тыс. Посетителей в месяц и 150 тыс. Сообщений, в среднем 100 просмотров страниц в секунду. Я пытаюсь выяснить, нормальная ли нагрузка на сервер или есть что-то, что я могу сделать, чтобы исправить проблемы с производительностью, не увеличивая настройку сервера и ежемесячные расходы.

Вот настройка сервера, который я запускаю прямо сейчас:

Тема WordPress разрабатывается с нуля, я оптимизировал запросы и свел к минимуму использование плагинов (всего 5 плагинов).

Я запускаю Nginx с обратным прокси-кешем, где я кэширую все страницы в течение 5 минут, чтобы иметь возможность обрабатывать пики трафика (два ежедневных пика с 3 тыс. Посетителей за 30 минут при отправке информационных бюллетеней).

Сервер MariaDB и Redis работает под управлением Debian с готовой конфигурацией. Единственное, что я изменил, это innodb_buffer_pool_size = 11G и max_connections = 300 в MariaDB.

ЦП БД работает на 50% при 100 посетителях в реальном времени и на 85-90% при 300-700 посетителях в реальном времени.

Проблема в том, что запросам требуется некоторое время для загрузки (3-6 секунд) даже при 50% загрузке ЦП.

Моя промежуточная среда работает на тех же серверах, но с другой таблицей базы данных (такое же количество сообщений), а время запросов составляет 0,5–1,5 секунды.

Таким образом, единственное отличие состоит в том, что в производственной базе данных одновременно работает больше пользователей.

Что может заставить запросы загружаться в это время?

Во-первых, включите медленное ведение журнала запросов, если вы еще этого не сделали:
https://mariadb.com/kb/en/library/slow-query-log-overview/

Затем вы можете взять один из этих запросов и указать EXPLAIN перед ним. Это покажет вам таблицу, которая объясняет, что произошло при выполнении запроса. Например, он покажет, использовался ли индекс, для чего был выполнен запрос. На следующей странице объясняется, что означают все столбцы:
https://mariadb.com/kb/en/library/explain/

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

Одно из основных недостатков WP можно исправить.

http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta обсуждает, как изменить схему для постмета (и, возможно, других метатаблиц), чтобы основные запросы, использующие эту таблицу, выполнялись быстрее.