Bonjour,
J'ai une petite question destinée aux experts, je cherche à savoir pourquoi une grosse requête bloque mon serveur MySql.
Le contexte : Il s'agit d'un gros site fonctionnant sur 2 serveurs (1 pour Apache et 1 pour MySql) qui sont identiques (8 x 2,4 Ghz, 8 Go de RAM, DD SSD, interfacé en 2 Gbps).
Le problème : Si on exécute, à partir du Apache, une grosse requête retournant plusieurs milliards d'enregistrements qui met 1 H à s'exécuter on arrive rapidement à un "too many connexion" pour les autres visiteurs le temps que la requête finisse de s'exécuter.
Mes hypothèses :
- Le serveur n'exécute qu'1 requête à la fois et les autres sont mises en attente, dans un fonctionnement normal ça serait transparent mais là ça bloquerait : Ce n'est pas ça car après observation des process à des instants t en fonctionnement normal il y a bien plusieurs requête qui s'execute parallèlement.
- Les connexions à la bdd misent en attente qui font aboutir au "too many connexion" concerne des requêtes portant sur la même table que la grosse requête et donc attendent le unlock de la table : Après calcule ce n'est pas possible, la table concernée est beaucoup trop peu utilisée pour arriver aussi rapidement au max connexion.
- Une des phases de traitement de la requête (ex : le "sending data") bloque temporairement la parallélisation des requêtes ?
Le but : Ma logique de fonctionnement serait que même si une requête lourde bloque quelque chose, ça ne doit être qu'1 processus et/ou 1 seul CPU mais pas le serveur MySql au complet qui indirectement bloque tout le site.
A ce stade j'avoue que ça dépasse mes compétences donc je voudrais savoir si quelqu'un serait inspirer pour m'expliquer là où ça bloque ?
Merci d'avance