Назад | Перейти на главную страницу

MySQL max_connections на экземпляре EC2 m1.large

Я использую выделенный сервер MySQL на экземпляре m1.large EC2 с 7,5 ГБ оперативной памяти.

Какое число может быть хорошим для установки моего max_connections значение?

Максимальное (теоретически) возможное использование памяти = Общий буфер сервера + (max_connections * Buffer per thread), что составляет:

key_buffer_size + tmp_table_size + max_heap_table_size + max_heap_table_size + tmp_table_size + innodb_buffer_pool_size + innodb_additional_mem_pool_size + innodb_log_buffer_size + query_cache_size + (max_connections * (read_buffer_size + read_rnd_buffer_size + sort_buffer_size + thread_stack + join_buffer_size))

Какое количество будет хорошим, зависит от этих компонентов. Как вы будете настраивать эти компоненты, зависит от того, что делает ваша БД.

Вы можете установить max_connections на 100 и другие параметры на более высокие значения, чем обычно, и каждый поток будет быстрым из-за больших буферов, вы можете установить его на 800 и другие параметры на более низкие значения, чем обычно, и БД может стать медленным для каждого соединения, потому что он будет читать данные с диска для глобального кеша.

Итак, все зависит от вашей БД, сколько данных она будет обрабатывать за раз и как вы оптимизируете для нее свою конфигурацию.

Вы должны просмотреть все параметры, перечисленные здесь, чтобы узнать, какие значения являются оптимальными для вашей БД. Возможно, ваше приложение и архитектура БД настолько плохи, что у вас слишком большие объединения и join_buffer_size очень большой, или, возможно, вам нужна сортировка, поэтому каждый поток может съесть все больше и больше оперативной памяти, но это не означает, что все потоки будут делать это одновременно. Это теоретический максимум. Средние, оптимальные значения могут отличаться. У вас может быть 10000000 запросов, которым для работы с буфером требуется всего 8 МБ ОЗУ на поток, но одному потоку может потребоваться 10 ГБ ОЗУ для работы с буфером. Изменение параметров для удовлетворения одного большого запроса может быть неоптимальным. Итак, зависит :)

Позвольте вашему приложению работать, собирать статистику и соответствующим образом оптимизировать БД, а не наоборот.

Ответ зависит от ожидаемой нагрузки: ожидаемого количества одновременных подключений и ожидаемого времени подключения. По умолчанию установлено значение 100. Для хорошей специализированной машины вы можете увеличить его до некоторого значения, например: 200, 500, или даже больше! Вы можете установить для него какое-то значение и наблюдать за подключениями к базе данных. Когда вы почувствуете необходимость, вы можете еще больше ее увеличить. Конечно, значение по умолчанию может быть небольшим, и его следует увеличить.

В max_connections это не единственный параметр, на который стоит обратить внимание. Есть и другие вещи, которые необходимо сделать для достижения лучшей производительности (например, оптимизация запросов). Увеличение max_connections не всегда может быть лучшим вариантом.