max_connections = (Available RAM – Global Buffers) / Thread Buffers
For getting the available RAM in bytes.
free -b total used free shared buff/cache available Mem: 8253255680 6625886208 172158976 931852288 1455210496 409915392
For getting the details about Global buffers, access MySQL and run the following command.
SHOW VARIABLES LIKE '%buffer%';
Output be like this:
mysql> SHOW VARIABLES LIKE '%buffer%'; +------------------------------+-----------+ | Variable_name | Value | +------------------------------+-----------+ | bulk_insert_buffer_size | 8388608 | | innodb_buffer_pool_instances | 1 | | innodb_buffer_pool_size | 134217728 | | innodb_change_buffering | all | | innodb_log_buffer_size | 8388608 | | join_buffer_size | 131072 | | key_buffer_size | 8388608 | | myisam_sort_buffer_size | 8388608 | | net_buffer_length | 16384 | | preload_buffer_size | 32768 | | read_buffer_size | 131072 | | read_rnd_buffer_size | 262144 | | sort_buffer_size | 2097152 | | sql_buffer_result | OFF | +------------------------------+-----------+ 14 rows in set (0.00 sec)
Ram: 8253255680
Global Buffers = key_buffer_size + innodb_buffer_pool_size +innodb_log_buffer_size + innodb_additional_mem_pool_size +net_buffer_length +query_cache_size
Thread Buffers: sort_buffer_size + myisam_sort_buffer_size + read_buffer_size + join_buffer_size + read_rnd_buffer_size+ thread_stack
It puts the data together for the calculation.
Global Buffers = 8388608+134217728+8388608+0+16384+0 =151011328
Thread Buffers = 8388608+2097152+131072+131072+262144+0 = 11010048
max_connections = (Available RAM – Global Buffers) / Thread Buffers = (8253255680 - 151011328 ) / (11010048) = 735.89
Mainly max_connections will be in the range of 200 to 320 for small websites and for large websites it vary from 700 to 1024. It mainly depends upon the ram that you have. Setting the value higher tends to use the MySQL resource concurrently by the connections and leads to MySQL down.