Как рассчитать переменную mysql max_connections?

Ответы:

27

Собираюсь опубликовать это как ответ, с соответствующей информацией. Основные формулы:

Доступная RAM = Глобальные буферы + (Thread Buffers x max_connections)

max_connections = (доступная оперативная память - глобальные буферы) / буферные потоки

Чтобы получить список буферов и их значений:

SHOW VARIABLES LIKE '%buffer%';

Вот список буферов, и являются ли они глобальными или потоковыми:

Глобальные буферы : key_buffer_size, innodb_buffer_pool_size, innodb_log_buffer_size, innodb_additional_mem_pool_size, net_buffer_size, query_cache_size

Буферы потоков : sort_buffer_size, myisam_sort_buffer_size, read_buffer_size, join_buffer_size, read_rnd_buffer_size, thread_stack

Дерек Дауни
источник
1
KCD предоставил эту ссылку в качестве калькулятора максимальной памяти: mysqlcalculator.com
Дерек Дауни
Дерек, ты имеешь в виду "Глобальные буферы = СУММА всех переменных глобальных буферов и Потоковые буферы = сумма всех переменных буферных потоков"?
Мат
11

ПРЕДУПРЕЖДЕНИЕ! Это с 2011 года с использованием MySQL 5.1.x. Используйте на свой риск

---- ОРИГИНАЛЬНЫЙ ПОЧТА ----

Вот еще одна альтернативная формула в форме хранимой процедуры:

DELIMITER //
CREATE PROCEDURE sproc_show_max_memory ( OUT max_memory DECIMAL(7,4))
BEGIN
SELECT ( @@key_buffer_size + @@query_cache_size + @@tmp_table_size + @@innodb_buffer_pool_size + @@innodb_additional_mem_pool_size + @@innodb_log_buffer_size + @@max_connections * ( @@read_buffer_size + @@read_rnd_buffer_size + @@sort_buffer_size + @@join_buffer_size + @@binlog_cache_size + @@thread_stack ) ) / 1073741824 AS MAX_MEMORY_GB INTO max_memory;
END//
DELIMITER ;
CALL sproc_show_max_memory(@show_max_memory);
SELECT @show_max_memory;

Я предполагаю, что вы используете базу данных MySQL> версии 5.1.x, и вы являетесь привилегированным пользователем. Но вы играете с максимальным количеством соединений, вставляя любое число, которое хотите, и видите результаты.

randomx
источник
1
Я только что прочитал вашу формулу. Довольно гладко! Кстати +1 !!!
RolandoMySQLDBA
2
Вероятно, пришло время пересмотреть эту формулу, учитывая все изменения в 5.5 и 5.6, но она все еще удобна.
randomx
0

Я смотрю с цифрой, которую получаю из простого вычисления: Ожидаемый_номер_ре_квестов_пер_секунд * Ожидаемый_авираж_резов_процесс_времени * 2.

Для дальнейшей настройки я всегда использую систему мониторинга с историческими данными и пытаюсь зарезервировать 20% в случае некоторого пика. Это немного сложнее, когда вы используете пул некоторых соединений (что обычно является хорошей идеей) - тогда вам нужно отслеживать количество используемых соединений в пуле.

RVS
источник