Como você calcula a variável mysql max_connections?

Respostas:

27

Indo postar isso como resposta, com as informações relevantes. As fórmulas básicas são:

RAM disponível = buffers globais + (buffers de segmento x max_connections)

max_connections = (RAM disponível - buffers globais) / buffers de segmento

Para obter a lista de buffers e seus valores:

SHOW VARIABLES LIKE '%buffer%';

Aqui está uma lista dos buffers e se eles são Global ou Thread:

Buffers Globais : key_buffer_size, innodb_buffer_pool_size, innodb_log_buffer_size, innodb_additional_mem_pool_size, net_buffer_size, query_cache_size

Buffers de segmento : sort_buffer_size, myisam_sort_buffer_size, read_buffer_size, join_buffer_size, read_rnd_buffer_size, thread_stack

Derek Downey
fonte
1
KCD desde que esta ligação como uma calculadora de memória máx: mysqlcalculator.com
Derek Downey
Derek, você quer dizer "Buffers globais = soma de todas as variáveis ​​de buffers globais e Thread Buffers = soma de todas as variáveis ​​de buffers de thread"?
27517 Mat
11

ATENÇÃO! Isso é de 2011 usando o MySQL 5.1.x. Use por sua conta e risco

---- POST ORIGINAL ----

Aqui está outra fórmula alternativa no formulário de procedimento armazenado:

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;

Estou assumindo que você está usando um banco de dados MySQL> versão 5.1.xe você é um usuário privilegiado. Mas você brinca com as conexões máximas inserindo o número que deseja e vê os resultados.

randomx
fonte
1
Acabei de ler sua fórmula. Pretty slick !!! Entre +1 !!!
RolandoMySQLDBA
2
Provavelmente está na hora de revisar essa fórmula, considerando todas as alterações em 5.5 e 5.6, mas ainda é útil.
randomx
0

Estou olhando para o número que estou obtendo da calibração simples: número_de_esperado_de_questão_por_segundo * número_de_esperança_de_ média_de_processos_de_tempo esperado * 2.

Para ajustes posteriores, estou sempre usando o sistema de monitoramento com dados históricos e tentando reservar 20% em caso de pico. É um pouco mais complexo quando você está usando o pool de algumas conexões (o que geralmente é uma boa ideia) - então você precisa monitorar o número de conexões usadas no pool.

rvs
fonte