Login Form  

   

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

Предупреждение! Перед изменениями сделайте резервные копии ваших файлов конфигурации.

Шаг 1. Расчет количества потоков

thread_concurrency - параметр отвечающий за количество потоков, которые запустит сервер. Как правило лучше всего указать значение, не большее чем количество ядер на вашем сервере. Если ядра hyperthreading, то значение умножается на два. Если на вашем сервере работает не только сервер mysql, возможно, вам потребуется указать меньшее количество потоков.

Например, если у вас виртуальная машина с 4 процессорами:
thread_concurency=4

Шаг 2. Утилизация памяти

key_buffer_size - интуитивно можно понять, что параметр отвечает за выделение памяти для операций. Если быть более точным, исходя из описания на офф. сайте, это размер буффера для таблиц типа MyISAM. Рекоммендовано устанавливать значение 25% от общего размера памяти. Я бы добавил 25% от размера свободной памяти. Если вы установите слишком маленькое значение для сервера с большой нагрузкой, сервер начнет использовать вместо RAM жесткий диск, что резко снизит производительность. Разработчики так же не рекоммендуют ставить слишком большое значение, т.к. это тоже чревато снижением производительности.

Например, если у вас 2GB RAM:
key_buffer_size=512M

table_open_cache - Количество кешируемых таблиц. Вообще этот параметр весьма относителен и для каждой базы должен подбираться отдельно. Разработчики рекоммендуют пользоваться информацией из параметра "Opened tables" (show status like "Opened_tables%"). Я бы рекоммендовал устанавливать значение в 1,5 раза большее чем значение этого параметра (но не меньше 128).

Стоит заострить внимание на том, что этот параметр очень сильно взаимосвязан с параметром max_connections. То есть если у вас max_connections=1000, то умножайте это значение на максимальное количество join в запросах к вашей базе. В итоге у вас может получиться довольно приличное значение.
 Далеко не все операционные системы позволят кешировать такое количество.

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

Значения table_open_cache и max_connections, пожалуй лучше всего выставлять 4 к 1.

Например:
table_open_cache=1024
max_connections=256

sort_buffer_size - Этот параметр регулирует количество выделяемой памяти для операций сортировки. Во многих статьях рекоммендуют выделять 64MB, а то и 128MB. На самом деле это делать крайне НЕ рекоммендуется. Как говорится в оффициальной документации, выделение больше чем 2MB может резко снизить общую производительность системы т.к. этот объем памяти будет выделяться несмотря на истинную необходимость. Т.е. даже если операции потребуется 200кб, выделено будет все равно установленное значение.

Итак, пожалуй наиболее оптимальное значение будет 1MB:

sort_buffer_size=1M

query_cache_limit - Не кешировать результаты запросов, превышающие это значение. Значение по умолчанию 1MB. Как правило больше и не требуется.

query_cache_limit=1M

query_cache_size - размер памяти, выделяемый для кеширования результатов запросов. Значение по умолчанию - 0. Это означает, что кеширование отключено. Нулевое значение отключает необходимость в query_cache_limit. Если на сервер возложена большая нагрузка и ресурсы позволяют, то можно выделить какое то количество памяти для более быстрого ответа сервера. Опять же не стоит устанавливать слишком большое значение.

Вывод:

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

   
© it-answer.ru