Друзья и семья, мне очень нравятся все ваши отзывы о первой части этой серии, и я очень ценю всю поддержку, которую вы мне оказываете. И я снова пишу здесь из-за этого, поэтому, пожалуйста, никогда не прекращайте меня поддерживать.
Краткое резюме
Если вы стартап, застрявший на WordPress, то добро пожаловать, мой брат, в этой серии для вас.
Wordpress имеет огромные плагины кодовой базы, и если вы запускаете контент, вы не можете игнорировать это, даже если вы разработчик.
Как разработчик, запускающий контент-стартап, я всегда спрашивал себя, стоит ли переходить с WordPress на мой собственный код?
Каждый раз, когда я говорил, что WordPress не может справиться с ситуацией и мне нужно двигаться, я нашел WordPress гибким, и я могу делать то, что хочу, с небольшими затратами времени и кода.
В этой серии я расскажу о ситуациях, которые возникают у меня при запуске, и о том, как я их решаю.
Я не специалист по Linux, поэтому все команды, которые я использовал в этой статье, хорошо работают с CentOS версии 7.6, и я не могу помочь вам с другими версиями.
Если вы не читали первую часть, рекомендую сначала прочитать ее, прежде чем читать эту.
Проблема
Как я уже говорил, мы уделяем большое внимание нашему стартапу, и мы отлично индексируем наши запросы — это нелегкий процесс, и вам нужна помощь эксперта по базам данных, чтобы убедиться, что он работает нормально — здесь возникает вопрос: достаточно ли индекса или мы можем сделать больше оптимизации на стороне нашей базы данных.
Почему мы в этом заинтересованы? просто потому, что MYSQL является важным и узким местом стека Wordpress и заставляет его работать хорошо, обычно оптимизируют все время обработки запроса.
Индекс 101
Я выскажу несколько общих замечаний об индексе, которые могут быть неверны всегда, но это поможет вам понять всю идею индекса. Итак, приступим:
Использование индекса в базе данных похоже на поиск в телефонном справочнике.
Ключ индекса выглядит как фамилия — обычно это телефонный справочник, индексируемый по фамилиям людей —
Запрос выбора выглядит как имя человека, телефон которого вы хотите получить.
Итак, давайте подумаем, как мы ищем в телефонном справочнике, это поможет нам представить, как работает индекс.
- Мы хотим найти телефон человека, скажем, «Алаа Салехи».
- Мы открываем телефонный справочник и ищем страницу, содержащую «Салехи», то есть фамилию, используя индекс на последних страницах справочника.
- Если контакт только с семьей «Салехи», то номер телефона вы найдете без дополнительных действий.
- Если есть более одного раза, вы попытаетесь найти «Алаа», выполнив поиск по всем именам в этой семье.
Эти шаги почти выполнены с вашим индексом, но с более подробной информацией и осложнениями:
- В базе данных есть «выборочный запрос», пытающийся найти результат.
- База данных, использующая предложение where для определения ключа индекса.
- Если ключа индекса достаточно для поиска результата, база данных извлекает эти строки с жесткого диска.
- Если ключа недостаточно, база данных должна работать линейно и проверять, что условия не покрываются ключом индекса, и, наконец, извлекает данные с жесткого диска.
Это самое простое описание и меньше деталей для идеи индекса, что поможет вам продолжить эту статью, и если вы хотите узнать больше об индексе, я советую вам купить эту книгу, она мне очень помогает.
Связь индекса, памяти и жесткого диска
- Индекс, как мы видим, — это кратчайший путь для поиска по табличным данным.
- Индекс содержит только данные в своей части столбца, поэтому другие данные в этой строке по-прежнему необходимо извлекать из данных таблицы.
- Извлечение данных из памяти всегда лучше, чем извлечение их с жесткого диска.
- Размер индекса меньше размера таблицы.
- Всегда рекомендуется загружать индекс в память, а 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, который очень поддерживает меня в написании этой статьи.
Спасибо за ваше время, и я хотел бы услышать больше от вас, и если вы найдете эту статью полезной для вас, пожалуйста, дайте мне знать, что поддержит меня, чтобы продолжить эту серию.
Обо мне
Я Алаа Алсалехи, профессиональный бэкэнд и мобильный разработчик. У меня есть стартап контента с рецептами еды, который насчитывает более четверти миллиона активных пользователей.
📝 Читайте эту историю позже в Журнале.
🗞 Просыпайтесь каждое воскресное утро и получайте самые примечательные технические истории, мнения и новости недели, ожидающие в вашем почтовом ящике: Получить примечательный информационный бюллетень ›