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

Краткое резюме

Если вы стартап, застрявший на WordPress, то добро пожаловать, мой брат, в этой серии для вас.

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

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

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

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

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

Если вы не читали первую часть, рекомендую сначала прочитать ее, прежде чем читать эту.

Проблема

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

Почему мы в этом заинтересованы? просто потому, что MYSQL является важным и узким местом стека Wordpress и заставляет его работать хорошо, обычно оптимизируют все время обработки запроса.

Индекс 101

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

Использование индекса в базе данных похоже на поиск в телефонном справочнике.

Ключ индекса выглядит как фамилия — обычно это телефонный справочник, индексируемый по фамилиям людей —

Запрос выбора выглядит как имя человека, телефон которого вы хотите получить.

Итак, давайте подумаем, как мы ищем в телефонном справочнике, это поможет нам представить, как работает индекс.

  1. Мы хотим найти телефон человека, скажем, «Алаа Салехи».
  2. Мы открываем телефонный справочник и ищем страницу, содержащую «Салехи», то есть фамилию, используя индекс на последних страницах справочника.
  3. Если контакт только с семьей «Салехи», то номер телефона вы найдете без дополнительных действий.
  4. Если есть более одного раза, вы попытаетесь найти «Алаа», выполнив поиск по всем именам в этой семье.

Эти шаги почти выполнены с вашим индексом, но с более подробной информацией и осложнениями:

  1. В базе данных есть «выборочный запрос», пытающийся найти результат.
  2. База данных, использующая предложение where для определения ключа индекса.
  3. Если ключа индекса достаточно для поиска результата, база данных извлекает эти строки с жесткого диска.
  4. Если ключа недостаточно, база данных должна работать линейно и проверять, что условия не покрываются ключом индекса, и, наконец, извлекает данные с жесткого диска.

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

Связь индекса, памяти и жесткого диска

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

Решение

Шаг № 1: Увеличение объема памяти для индекса

Как мы уже говорили, Mysql не загружает все индексы в память, потому что каждая схема базы данных и сервер базы данных различны, и нет общего рецепта для всех случаев. Таким образом, в MySQL есть переменные для администраторов баз данных, которые помогают им оптимизировать каждый случай индивидуально. У MySQL больше, чем движок базы данных, и у каждого есть свои собственные переменные. Как я могу узнать, какой движок я использую в своей базе данных, просто проверьте свои таблицы, вы найдете там название движка. Многие люди подробно рассказывают об увеличении объема памяти, я дам вам названия этих переменных, чтобы помочь вам в поиске:

Для переменной Innodb innodb_buffer_pool_size

Для переменной MyIsm key_buffer_size

Измените эти значения в файле my.cnf, используя vi или nano.

Вы можете найти этот файл в /etc/my.cnf

Добавьте свою модификацию в раздел [mysqld] и будьте уверены в этом пункте, потому что он не будет работать, если вы его пропустите.

[mysqld]

key_buffer_size = 1G

[другой раздел]

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

Шаг № 2: Уменьшите выборку данных с жесткого диска - это продвинутый уровень, не обойтись без глубоких знаний индексации-

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

Просто это означает медленные запросы и плохую производительность.

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

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

Вывод

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

Особая благодарность моему другу @Ahmed Haniah, который очень поддерживает меня в написании этой статьи.

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

Обо мне

Я Алаа Алсалехи, профессиональный бэкэнд и мобильный разработчик. У меня есть стартап контента с рецептами еды, который насчитывает более четверти миллиона активных пользователей.

📝 Читайте эту историю позже в Журнале.

🗞 Просыпайтесь каждое воскресное утро и получайте самые примечательные технические истории, мнения и новости недели, ожидающие в вашем почтовом ящике: Получить примечательный информационный бюллетень ›