max_connections
22 May 2007 par pĂ©bĂ©Aujourd’hui fut la journĂ©e des ‘too many connections’. En effet pas loin de 3 applications ont plantĂ© du fait que le nombre maximum de connexions MySQL avait Ă©tĂ© atteint. Le message d’erreur est très parlant. Comment est ce possible? mysqld autorise max_connections+1 clients Ă se connecter. Le ‘+1′ est une extra connexion rĂ©servĂ©e aux comptes ayant le privilège SUPER. Donc si votre user applicatif Ă ce privilège, vous vous retrouvez bloquĂ©s. Prenez comme principe d’avoir les privilèges minimaux pour vos utilisateurs, INSERT, UPDATE, DELETE et SELECT suffisent largement.
La valeur par défaut du paramètre est de 100.
mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 100 |
+-----------------+-------+
Donc Ă vous de connaĂ®tre vos besoins et d’allouer un nombre maximum suffisant pour votre application. Cela peut ĂŞtre utile pour vous montrer une erreur logicielle si le nombre est trop important.
Maintenant quelle est le problème si j’autorise trop de connexions simultanĂ©es. Tout simplement d’ utiliser trop de mĂ©moire et de planter votre serveur. Il faut garder en tĂŞte cette rapide Ă©quation:
Un connexion ( MySQL thread ) utilise en RAM au maximum:
( thread_stack + net_buffer_length + max_allowed_packet + read_buffer_size + join_buffer_size + tmp_table_size + myisam_sort_buffer_size )
Sachant que vous avez déjà alloué de la mémoire à votre buffer pool / key cache, restez vigilant à ne pas dépasser le total de votre serveur.
Avec MySQL 5.0, une nouvelle variable est apparue, ‘max_user_connections’ pour limiter le nombre de connexions concurrentes pour un mĂŞme utilisateur. C’est une variable globale pour TOUS les utilisateurs et activĂ©e pour les valeurs > 0.
mysql> show variables like 'max_user_connections';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| max_user_connections | 0 |
+----------------------+-------+
Autres billets susceptibles de vous intéresser :

28 May 2007 at 2:58 pm
Domage qu’on ne puisse faire un pool de connexions avec php…
j’avais tester les connexions persistantes mais c’Ă©tait pas mieux.
28 May 2007 at 4:37 pm
Tu n’as pas besoin de faire un pool de connexions avec MySQL. On se sert de pool pour Ă©viter de crĂ©er de connexion car c’est demandant en ressource pour Oracle, DB2,… pour MySQL l’overhead est quasiment nul…
Par contre tes connexions sont partagées par tes process apache.