Статьи

Изменения в базе данных для улучшения производительности WordPress

Если вы открываете сайт — будь то новостной сайт, блог или сайт электронной коммерции, есть вероятность, что вы подумаете об использовании WordPress. Как только пользователи начинают подогревать сайт по мере его популярности, ядра WordPress может быть недостаточно для эффективной обработки входящего трафика. Затем вам нужно будет увеличить свой веб-сайт для обработки большего количества входящих соединений.

Есть много способов масштабирования вашего сайта WordPress, но в этом посте мы сосредоточимся на настройке базы данных. WordPress использует MySQL в качестве базы данных, и в этом посте предполагается, что вы знакомы со структурой базы данных WordPress .

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

Очистить

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

Когда ваш сайт новый, все эти данные могут не вызвать значительного снижения производительности WordPress, но по мере роста размера вашего сайта эти ненужные данные могут увеличить размер вашей базы данных, что, в свою очередь, замедляет запросы.

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

Дефрагментация

Когда вы добавляете несколько записей, удаляете некоторые другие и добавляете еще несколько, данные не обязательно сохраняются последовательно в одном и том же месте. Они могут занимать разные сектора на жестком диске. Эти фрагменты представляют собой логические единицы данных, не имеющие индивидуального значения, но в целом составляют полную базу данных. Существует много типов фрагментации: горизонтальная, вертикальная и смешанная или гибридная.

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

Самый простой способ дефрагментировать базу данных MySQL — это использовать phpMyAdmin , который предоставляет графический интерфейс для выполнения этого, а также многие другие распространенные задачи администрирования базы данных.

Если вы хотите дефрагментировать одну таблицу, вы можете выполнить пустую команду ALTER TABLE По сути, он восстанавливает таблицу с нуля, поэтому все данные хранятся в одном месте. Чтобы дефрагментировать всю базу данных, возьмите дамп SQL, отбросьте таблицы и восстановите дампы — снова, перестроив все таблицы. Дефрагментация помогает сократить время индексации.

Кэширование базы данных

В WordPress запрос сначала обслуживается веб-сервером (обычно Apache), затем передается в PHP, который обрабатывает запросы, извлекает или манипулирует некоторыми данными в базе данных, а затем отображает результаты. Когда на сайт поступает много входящих запросов, обслуживающих один и тот же контент по каждому запросу, неэффективно обрабатывать запрос и извлекать одни и те же данные из базы данных каждый раз. Вот где начинается кэширование. Существует много способов кэширования данных, но в этом посте мы поговорим о кэшировании базы данных.

Вообще говоря, существует два способа кэширования базы данных. Вы можете кэшировать полные таблицы или результаты SQL-запросов. Существуют различные продукты, которые помогают вам выполнять кэширование базы данных, например memcached . Тем не менее, я бы посоветовал вам использовать плагин WordPress для выполнения кэширования базы данных, если у вас нет опыта в этой области.

Хорошим плагином для выполнения кэширования базы данных является W3 Total Cache , хотя он также выполняет и многие другие виды кэширования.

Кроме того, вы также можете кэшировать свои пользовательские запросы. Например, если у вас есть запрос, который отображает наиболее активных пользователей, вам не нужно запускать его каждый раз, когда WordPress обслуживает страницу (так как он должен меняться довольно редко). Таким образом, вы можете выполнить запрос только через определенные промежутки времени, используя API для переходных процессов . Вот руководство по использованию Transients API для кеширования ваших запросов в WordPress .

пересчет

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

Масштабирование баз данных важно в архитектуре высокой доступности. Одним из способов масштабирования ваших баз данных является использование репликации «главный-подчиненный».

Мастер Раб репликации
Источник — блог производительности MySQL

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

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

Вы можете добиться репликации главного подчиненного в WordPress, используя плагин HyperDB и HAProxy в качестве балансировщика нагрузки. Вот учебник, подробно описывающий шаги по настройке этой конфигурации в DigitalOcean — вы можете применить те же методы к любому провайдеру.

Последние мысли

Мы обсудили много способов, которые могут помочь вам подготовиться к следующему всплеску трафика на вашем сайте. Удалось ли вам справиться с новыми посетителями? Этот урок помог вам? Вы использовали новую технику, не упомянутую здесь? Не стесняйтесь, дайте нам знать в комментариях ниже!