max_connections es un valor que no se puede poner al azar, ya que afecta al funcionamiento de la aplicación y establece el máximo de memoria que MySQL podrá utilizar. La fórmula para calcularlo es:
(read_buffer_size + read_rnd_buffer_size + sort_buffer_size + thread_stack + join_buffer_size) * max_connections
Por lo tanto, si los buffers anteriores suman 70 megas y ponemos 10.000 conexiones máximas, MySQL se creerá que tiene para gestionar 680 GB de RAM.
Imaginemos entonces que la máquina tiene 3gb. Como los 680 no los va a intentar reservar al iniciio no hay problema, pero el aceptará conexiones sin parar y llegará un momento en el que se superen los 3 gigas. Como MySQL cree que tiene 680, seguirá aceptando conexiones y todas empezarán a fallar, las nuevas y las actuales por errores de falta de memoria. Al final, aunque indiques 10.000 conexiones máximas, tu máquina no las gestionará y tirarás a bajo todo …
[Lea más]