Comment calculez-vous la variable mysql max_connections?

Réponses:

27

Va poster cela comme une réponse, avec les informations pertinentes. Les formules de base sont:

RAM disponible = tampons globaux + (tampons de threads x max_connections)

max_connections = (RAM disponible - Tampons globaux) / Tampons de threads

Pour obtenir la liste des tampons et leurs valeurs:

SHOW VARIABLES LIKE '%buffer%';

Voici une liste des tampons et s'ils sont globaux ou threadés:

Tampons globaux : key_buffer_size, innodb_buffer_pool_size, innodb_log_buffer_size, innodb_additional_mem_pool_size, net_buffer_size, query_cache_size

Tampons de threads : sort_buffer_size, myisam_sort_buffer_size, read_buffer_size, join_buffer_size, read_rnd_buffer_size, thread_stack

Derek Downey
la source
1
KCD a fourni ce lien en tant que calculateur de mémoire max: mysqlcalculator.com
Derek Downey le
Derek, voulez-vous dire "Tampons globaux = SOMME de toutes les variables de tampons globaux et Thread Buffers = somme de toutes les variables de tampons de threads"?
Mat
11

ATTENTION! C'est à partir de 2011 en utilisant MySQL 5.1.x. À utiliser à vos risques et périls

---- POSTE ORIGINAL ----

Voici une autre formule alternative sous forme de procédure stockée:

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;

Je suppose que vous utilisez une base de données MySQL> version 5.1.x et que vous êtes un utilisateur privilégié. Mais vous jouez avec le nombre maximal de connexions en insérant le nombre souhaité et en visualisant les résultats.

randomx
la source
1
Je viens de lire votre formule. Assez glissant !!! BTW +1 !!!
RolandoMySQLDBA
2
Il est probablement temps de revoir cette formule compte tenu de tous les changements apportés dans les versions 5.5 et 5.6, mais cela reste pratique.
randomx
0

Je regarde avec un chiffre que je tire d'un simple calcul: nombre_attendu_attendu_secondaire * nombre_attendu_attendu_attente_processing_temps * 2.

Pour un réglage ultérieur, j'utilise toujours le système de surveillance avec des données historiques et j'essaie d'avoir 20% de réserve en cas de pic. C'est un peu plus complexe lorsque vous utilisez le regroupement de connexions (ce qui est généralement une bonne idée) - vous devez ensuite surveiller le nombre de connexions utilisées dans le pool.

rvs
la source