Я использую выделенный сервер 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
не всегда может быть лучшим вариантом.