Оптимизация производительности MySQL включает в себя множество аспектов. В этой статье объясняются некоторые ключевые параметры MySQL. Эти параметры в определенной степени являются ключевыми параметрами, определяющими производительность базы данных MySQL. Мы часто сталкиваемся с проблемами производительности во время управления и разработки баз данных, что включает оптимизацию производительности MySQL. Путем поиска информации в Интернете и собственных попыток автора считаю более критичными следующие параметры системы:
Ключевой параметр первый: back_log
Количество соединений, которые должен иметь MySQL. Это работает, когда основной поток MySQL получает много запросов на соединение за короткий период времени, а затем основному потоку требуется некоторое время (хотя и кратковременное), чтобы проверить наличие соединений и запустить новый поток.
Значение back_log указывает, сколько запросов может быть сохранено в стеке за короткий период времени, прежде чем MySQL временно перестанет отвечать на новые запросы. Только если вы ожидаете много подключений за короткий период времени, вам нужно его увеличить, другими словами, это значение представляет собой размер очереди прослушивания входящих TCP/IP-соединений. Ваша операционная система имеет собственное ограничение на размер очереди. Попытка установить back_log выше предела вашей операционной системы не даст никакого эффекта.
Когда вы просматриваете список процессов хоста и обнаруживаете большое количество 264084 | неаутентифицированных пользователей | xxx.xxx.xxx.xxx | Connect | NULL | NULL, вам необходимо увеличить значение back_log. Значение по умолчанию — 50, я изменил его на 500.
Ключевой параметр второй: active_timeout.
Количество секунд, в течение которых сервер ожидает действия по интерактивному соединению, прежде чем закрыть его. Интерактивный клиент определяется как клиент, использующий опцию CLIENT_INTERACTIVE функции mysql_real_connect(). Значение по умолчанию 28800, я изменил на 7200.
Ключевой параметр третий: key_buffer_size.
Индексные блоки буферизуются и используются всеми потоками. key_buffer_size — это размер буфера, используемый для блоков индекса. Увеличьте его, чтобы улучшить обработку индекса (для всех операций чтения и многократной записи), до настолько большого размера, насколько вы можете себе позволить. Если вы сделаете его слишком большим, система начнет подкачку и сильно замедлится. Значение по умолчанию — 8388600 (8 МБ), а мой хост MySQL имеет 2 ГБ памяти, поэтому я изменил его на 402649088 (400 МБ).
Ключевой параметр четвертый: max_connections.
Допустимое количество одновременных клиентов. Увеличение этого значения увеличивает количество файловых дескрипторов, требуемых mysqld. Это число следует увеличить, иначе вы часто будете видеть «Слишком много ошибок подключения». Значение по умолчанию — 100, я изменил его на 1024.
Ключевой параметр пятый: Record_buffer
Каждый поток, выполняющий последовательное сканирование, выделяет буфер этого размера для каждой сканируемой таблицы. Если вы выполняете много последовательных сканирований, возможно, вам захочется увеличить это значение. Значение по умолчанию — 131072 (128К), я изменил его на 16773120 (16М)
Ключевой параметр шесть: sort_buffer
Каждому потоку, который необходимо отсортировать, выделяется буфер такого размера. Увеличение этого значения ускоряет операции ORDER BY или GROUP BY. Значение по умолчанию — 2097144 (2М), я изменил его на 16777208 (16М).
Ключевой седьмой параметр: table_cache.
Количество таблиц, открытых для всех потоков. Увеличение этого значения увеличивает количество файловых дескрипторов, требуемых mysqld. MySQL требует 2 файловых дескриптора для каждой уникальной открытой таблицы. Значение по умолчанию — 64, я изменил его на 512.
Ключевой параметр номер восемь: thread_cache_size.
Количество потоков, хранящихся в нем, можно использовать повторно. Если есть, новый поток извлекается из кеша, а если при разрыве соединения остается место, клиентский поток помещается в кеш. Если имеется много новых потоков, это значение переменной можно использовать для повышения производительности. Сравнивая переменные в состояниях Connections и Threads_created, можно увидеть роль этой переменной. Я поставил 80.
Ключевой параметр номер девять: wait_timeout
Количество секунд, в течение которых сервер ожидает действия по соединению, прежде чем закрыть его. Значение по умолчанию 28800, я изменил на 7200.
Примечание. Регулировку параметров можно выполнить, изменив файл /etc/my.cnf и перезапустив MySQL. Это относительно осторожная работа, и приведенные выше результаты — лишь некоторые из моих мнений. Вы можете дополнительно изменить ее в соответствии с аппаратными условиями вашего хоста (особенно размером памяти).