»  Производительность  »  Как работает база данных

Как работает база данных

Как работает база данных ВордпрессБаза данных — это библиотека сайта, в которой в соответствующих разделах находится вся информация сайта, от содержания постов и страниц, до комментариев, имен пользователей и паролей. MySQL — софт библиотеки, phpMyAdmin — веб-интерфейс для управления MySQL, SQL — язык запросов для управления софтом.

Кроме Вордпресс, софтом MySQL пользуются Drupal, Joomla, Google, Facebook, YouTube, Twitter и другие.

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

Содержание:

Что такое MySQL
Архитектура базы данных Вордпресс
Движки MySQL
Оптимизация базы данных

  1. Устанавливайте только те плагины, которые будете использовать
  2. Спам
  3. Ревизии постов
  4. Удаление неиспользуемых таблиц
  5. Оптимизация БД вручную
  6. Оптимизация БД при помощи плагинов

Восстановление БД
База данных свежей установки Вордпресс 4.9.8
Как работает кеширование базы данных
Заключение

Что такое MySQL

MySQL — один из компонентов стека LAMP — Linux, Apache, MySQL и PHP, — софта, который используется для разработки сайтов.

Вордпресс использует SQL-запросы в разметке PHP для работы с базами данных MySQL. Например, если у пользователя есть роль Подписчика на сайте, SQL используется для входа пользователя на сайт, нахождения в базе данных ID пользователя, проверки прав доступа и проверки правильности выведенных данных во фронт-энде.

PHP и SQL создают динамический контент, который зависит от разных факторов, например, ID пользователя и его роли на сайте. Это позволяет показывать или скрывать контент для разных пользователей, например, Администратора, Редактора или Подписчика. Без SQL и MySQL это было бы невозможно.

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

Это суть работы базы данных.

Архитектура базы данных Вордпресс

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

  • wp_commentmeta — хранит метаданные всех комментариев на Постах и Страницах и в кастомных видах записей.
  • wp_comments —  хранит все комментарии на сайте, включая Опубликованные, Ожидающие проверки, Одобренные и Спам.
  • wp_links — хранит информацию о ссылках в менеджере ссылок; эта функция сейчас редко используется, после версии 3.5 скрыта по умолчанию.
  • wp_options – самая большая таблица Вордпресс, в которой хранится множество настроек, от адреса сайта до настроек Чтения и Обсуждения. В этой таблице хранят свои записи темы и плагины.
  • wp_postsmeta – в этой таблице хранятся метаданные постов и страниц.
  • wp_posts – хранит контент постов и страниц и данные меню и навигации.
  • wp_terms – эта таблица хранит категории постов, ссылок и тегов.
  • wp_term_relationships – сообщения связаны с категориями и тегами в таблице wp_terms, эти ассоциации хранятся в таблице wp_term_relationships.
  • wp_term_taxonomy – хранит таксономию категорий, ссылок и тегов для записей в таблице wp_terms.
  • wp_usermeta – хранит метаданные всех пользователей из таблицы wp_users.
  • wp_users – в этой таблице хранятся данные о всех пользователях сайта.

В структуру базы данных мультисайт установки Вордпресс добавлено еще несколько таблиц:

  • wp_blogs – каждый сайт Мультисайт сети хранится здесь.
  • wp_blog_versions – хранит текущую версию базы данных каждого сайта в сети, и используется в основном для обновления Мультисайт сети. Обновляется когда обновляется каждый сайт.
  • wp_registration_log – хранит информацию о пользователях на каждом сайте.
  • wp_site – содержит адрес сайта.
  • wp_sitemeta – эта таблица хранит разные настройки сайтов.
  • wp_users – содержит данные о всех пользователях. Такая же таблица есть в одиночной установке Вордпресс, но в этой таблице есть 2 дополнительных поля / строки: Спам и Удаленные.
  • wp_usermeta – содержит метаданные каждого пользователя каждого сайта.

Кроме этих таблиц добавляются таблицы каждого подсайта в мультисайт установке, например, wp_2_commentmeta, wp_2_comments, wp_2_links и так далее. Данные основного сайта хранятся в своих основных ненумерованных таблицах.

Плагины тоже хранят свои данные в базе данных

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

Плагины могут использовать стандартные таблицы Вордпресс, например, wp_posts или wp_postsmeta, или создавать свои собственные таблицы. Некоторые плагины создают свои собственные таблицы, например, WooCommerce. Он создает 8 собственных таблиц, которые хранят ID товаров, заказы, налоги и так далее.

Считается более предпочтительным, чтобы плагины использовали стандартные таблицы Вордпресс для хранения своей информации, например, таблицу wp_options, но это не всегда возможно, особенно для таких больших плагинов как WooCommerce.

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

Движки MySQL

MySQL использует разные движки для хранения и извлечения информации из таблиц базы данных. MySQL поддерживает 13 разных движков, самые популярные из них — MyISAM и InnoDB.

В большинстве случаев в конфигурационном файле MySQL установлен по умолчанию движок MyISAM.

Вы можете заменить движок MyISAM на InnoDB. MyISAM быстро считывает информацию. InnoDB тоже быстро считывает информацию, но записывает информацию быстрее с помощью механизма блокировки строк. Так как Вордпресс и считывает, и записывает информацию в базу данных, InnoDB будет лучшим выбором.

Движок InnoDB в базе данных

Обычно движок MyISAM установлен по умолчанию на недорогих хостингах. Чтобы сменить движок хранения базы данных, сделайте бэкап и используйте этот запрос:

SET default_storage_engine=InnoDB;

Чтобы изменить движок только одной таблицы, используйте этот запрос:

ALTER TABLE table_name ENGINE=InnoDB;

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

Оптимизация базы данных

Одна из причин замедления сайта — неочищенная и неоптимизированная база данных.

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

На всякий случай перед очисткой / оптимизацией сделайте бэкап сайта.

Устанавливайте только те плагины, которые будете использовать

Простой способ оптимизировать базу данных, ничего не делая — не устанавливайте плагины для тестирования на сайте. Для тестирования плагинов лучше иметь отдельный сайт на техническом домене или на локальном сервере.

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

Существует 5 видов плагинов, которые создают большое количество информации в базе данных:

  • Плагины безопасности. Большинство плагинов безопасности хранят большое количество информации об атаках, которые проводились на ваш сайт для защиты его от будущих атак, о спаме, попытках доступа и так далее.
  • Плагины статистики. Эти плагины хранят информацию о страницах, визитах, браузерах, ключевых словах и так далее.
  • Анти-спам плагины. Так же как плагины безопасности, эти плагины хранят большое количество данных об IP-адресах, емейл адресах, странах и так далее.
  • Плагины вывода контента. Вывод статей сайта в тех или иных местах по тому или иному признаку, лайки и визиты страниц, и так далее, эти плагины создают большое количество информации, лучше использовать их по минимуму.
  • Мультиязычные плагины. Плагин WPML создает большое количество таблиц и записей в БД.

Старайтесь использовать плагины статистики и вывода контента как можно меньше.

Спам

Спам — еще один источник наполнения базы данных мусором. Вы можете удалить весь спам в базе данных при помощи SQL запроса:

DELETE FROM wp_comments WHERE comment_approved = ‘spam’

Или из админки Вордпресс. Зайдите в Комментарии -> Спам, нажмите кнопку «Очистить спам». Перед удалением всех комментариев проверьте их, в спам могли попасть нужные комментарии посетителей сайта.

Если вы не хотите бороться со спамом ручным способом, самый лучший плагин от спама, который я использовал — Kama SpamBlock.

Ревизии постов

В Вордпресс 2.6 была представлена функция ревизии постов, которая позволяет хранить предыдущие версии постов, в том числе черновики и обновления. Автосохранение сохраняет только последнюю версию, предпоследняя версия автосохранения удаляется автоматически, то есть база данных не будет переполняться автосохранениями. Но будет наполняться ревизиями каждый раз, когда вы нажимаете «Обновить» или «Сохранить Черновик».

Ревизии постов — полезная функция, но количество ревизий можно ограничить. Обычно я использую 3-5 ревизий. Добавьте эти строки в wp-config.php:

Замените 4 на нужное количество, -1 если вы хотите сохранять все ревизии и 0, если хотите выключить ревизии вообще, кроме автосохранения.

Чтобы удалить ревизии существующих постов, используйте этот запрос:

Этот запрос удаляет все ревизии всех постов, их метаданнные и таксономии.

Если вы не хотите использовать запросы, используйте плагин Optimize Database after Deleting Revisions или один из этих плагинов.

Удаление неиспользуемых таблиц

Плагины, которые создают таблицы в базе данных, обычно не удаляют их после своего удаления. Если вы удалили плагин и не планируете снова его использовать, вы можете удалить его таблицы из БД. Для этого вы можете использовать плагин WPDBSpringClean (внимание, плагин не обновлялся более 2-х лет), или сделать это вручную, это более предпочтительно.

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

Оптимизация БД вручную

У MySQL есть стандартная функция оптимизации базы данных OPTIMIZE, которая «реорганизует физическое хранилище табличных данных и связанных с ними индексных данных, чтобы уменьшить пространство для хранения и повысить эффективность ввода-вывода при доступе к таблице». В разных движках запрос optimize работает по-разному.

Вы можете оптимизировать базу данных запросом optimize в phpMyAdmin. Подробнее здесь.

Оптимизация БД при помощи плагинов

Если вы хотите, чтобы эту работу делал плагин, попробуйте WP-Optimize, это простой и популярный плагин, сейчас у него более 600.000 установок. Он удаляет ревизии постов, старые метаданные, черновики постов и удаленные комментарии.

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

Кроме этого плагина, есть и другие плагины с более мощным функционалом.

Восстановление БД

Если по какой-то причине ваша база данных повредилась, вы можете добавить несколько строк кода в файл wp-config.php, чтобы восстановить ее:

После того, как вы сохранили файл, запустите браузер и откройте адрес:

www.ваш-сайт.ru/wp-admin/maint/repair.php

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

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

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

База данных свежей установки Вордпресс 4.9.8

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

Transients API

Options API — стандартный способ хранения информации в базе данных с простым созданием, обновлением и удалением записей. Transients API похож на Options API, но с дополнительной функцией срока хранения, которая упрощает работу с таблицей wp_options для временного хранения кешированной информации.

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

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

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

Удаляйте transients с осторожностью.

Memcached

Memcached позволяет кешировать большие запросы к БД в оперативной памяти, это уменьшает количество обращений к базе данных. Это ускорит загрузку страниц, так как данные уже загружены без обращения к БД.

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

Если вы хотите использовать Memcached с плагином кеширования, например, W3 Total Cache, то сначала нужно настроить Memcached на сервере, после этого подключить Memcached к плагину кеширования. Неправильно настроенный модуль Memcached может нарушить работу базы данных или сайта, могут появиться проблемы с автоматическим обновлением или проблемы с темами и плагинами, которые используют transients.

Redis

Модуль Redis — это продвинутая технология хранения и кеширования базы данных в оперативной памяти, которая позволяет загружать страницы гораздо быстрее.

Чтобы подключить Redis к своему сайту, используйте плагин Redis Object Cache, но сначала настройте Redis. Вы можете сделать это при помощи скрипта Predis или расширения Redis HHVM.

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

Разница между Memcached и Redis в том, что Memcached — это технология кеширования в оперативной памяти, а Redis — это сервер с правильно организованной структурой данных, который может быть использован для реального хранения данных, а не просто в качестве хранилища обновляемого кеша.

Заключение

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

Оставьте комментарий