Настройка и оптимизация MySQL и MariaDB

MySQL и MariaDB являются наиболее широко используемыми системами управления реляционными базами данных (RDMS), когда речь идет о хостинге веб-сайтов и системах CMS, таких как Joomla, WordPress, Drupal и Typo 3.

Храните данные MySQL в отдельных разделах

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

Установите максимальное количество соединений MySQL

MySQL/MariaDB использует инструкцию max_connections, которая определяет, сколько одновременных соединений в данный момент разрешено на сервере. Слишком большое количество соединений приводит к большому потреблению памяти, а также к высокой загрузке процессора. Для небольших сайтов количество соединений может быть определено в 100-200, а для крупных может потребоваться 500-800 и более. Значение max_connections можно динамически изменять с помощью SQL-запроса.

Включить журнал медленных запросов MySQL

Ведение журнала запросов, выполнение которых занимает очень много времени, облегчает поиск и устранение проблем с базой данных. Журнал медленных запросов можно включить, добавив следующие строки в конфигурационный файл MySQL/MariaDB.

Где первая переменная включает журнал медленных запросов

Вторая переменная определяет каталог файла журнала

Третья переменная определяет время выполнения запроса MySQL.

Перезапустите службу MySQL/MariaDB и проследите за журналом

Установите максимальный пакет, разрешенный MySQL

В MySQL данные разбиваются на пакеты. Max_allowed_packet определяет максимальный размер пакетов, которые могут быть отправлены. Установка слишком низкого значения max_allowed_packet может привести к слишком медленному выполнению запроса. Рекомендуется устанавливать значение packet равным размеру самого большого пакета.

Настройка емкости временной таблицы

Tmp_table_size - это максимальное пространство, используемое для таблицы встроенной памяти. Если размер таблицы превышает указанный предел, она будет преобразована в таблицу MyISAM на диске. В MySQL/MariaDB вы можете добавить следующие переменные в конфигурационный файл для настройки временного размера таблицы. Рекомендуется установить это значение на сервере 64M на Гб памяти.

Перезапустите службу mysql

Настройте максимальный объем таблицы памяти

Max_heap_table_size - это переменная, используемая в MySQL для настройки максимального объема таблицы памяти. Размер максимальной емкости таблицы памяти должен быть таким же, как и емкость временной таблицы, чтобы избежать записи на диск. Рекомендуется установить это значение на сервере равным 64M на ГБ памяти. Добавьте следующую строку в конфигурационный файл MySQL и перезапустите службу.

 

Чтобы применить изменения, перезапустите сервер базы данных.

Отключение обратного поиска DNS для MySQL

При получении нового соединения MySQL/MariaDB выполняет поиск DNS для определения IP-адреса пользователя. Это может вызвать задержку, если конфигурация DNS недействительна или есть проблемы с DNS-сервером. Чтобы отключить поиск DNS, добавьте следующую строку в конфигурационный файл MySQL и перезапустите службу MySQL.

Перезапустите службу:

Избегайте использования свопинга в MySQL

Ядро Linux перемещает часть памяти в специальный раздел диска, называемый "swap" пространством, когда в системе заканчивается физическая память. В этом случае система записывает информацию на диск, а не освобождает часть памяти. Поскольку системная память быстрее дискового хранилища, рекомендуется отключить своппинг. Отключить своппинг можно с помощью следующей команды.

Увеличение размера буферного пула InnoDB

MySQL/MariaDB имеет движок InnoDB, который имеет буферный пул для кэширования и индексирования данных в памяти. Буферный пул помогает MySQL/MariaDB запросам выполняться сравнительно быстрее. Выбор правильного размера буферного пула InnoDB требует определенных знаний о системной памяти. Лучше всего установить значение размера буферного пула InnoDB на 80% от объема оперативной памяти.

Пример.

Системная память = 4 ГБ
Размер буферного пула = 3,2 ГБ

Добавьте следующую строку в конфигурационный файл MySQL и перезапустите службу

Перезапустите базу данных:

Работа с размером кэша запросов

query_cache_size был удален в MySQL 8.

Директива Query cache в MySQL/MariaDB используется для кэширования всех запросов, которые постоянно повторяются с одними и теми же данными. Для небольших сайтов рекомендуется установить значение 64MB и со временем увеличивать его. Увеличивать размер кэша запросов до гигабайтов не рекомендуется, так как это может ухудшить производительность базы данных. Добавьте следующую строку в файл my.cnf.

Проверка неиспользуемых соединений

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

Запрос выведет список процессов, которые находятся в состоянии сна. Как правило, в PHP это событие может произойти при использовании mysql_pconnect. Это открывает соединение с MySQL, выполняет запросы, снимает аутентификацию и оставляет соединение открытым. С помощью директивы wait_timeout простаивающие соединения могут быть прерваны. Значение по умолчанию для wait_timeout равно 28800 секунд, которое можно уменьшить до минимального значения, например 60 секунд. Добавьте следующую строку в файл my.cnf

Восстановление базы данных MySQL

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

Используйте следующую команду для выполнения действий по ремонту и оптимизации.

Для всех баз данных:

Для конкретной базы данных:

Замените dbname на имя вашей базы данных

Проверка производительности MySQL/MariaDB с помощью инструментов тестирования

Наилучшей практикой является регулярная проверка производительности баз данных MySQL/MariaDB. Это позволит легко получить отчет о производительности и точки улучшения. Существует множество инструментов, среди которых лучшим является mysqltuner.

Выполните следующую команду, чтобы загрузить инструмент

Разархивируйте файл

Перейдите в каталог проекта и выполните следующий скрипт.

Про использование mysqltuner можно почитать в статье "Оптимизация работы MySQL"

Понравилась статья? Поделиться с друзьями:
Добавить комментарий