Aujourd’hui, le site est de nouveau bloqué, et un grand nombre de personnes dorment sont trouvées
Causes du sommeil :
1 Le programme client n’a pas appelé mysql_close() avant de sortir.
2 Le client dormait plus de wait_timeout ou interactive_timeout secondes sans émettre de requêtes au serveur.
3 Le programme client s’est arrêté brusquement en plein transfert de données
Si le nombre de processus de veille dans la même période est trop élevé, et que le nombre total de connexions dans d’autres états dépasse la valeur max_connection, alors MySQL ne peut plus traiter de requêtes sauf l’utilisateur root, ne peut établir de connexion avec aucune requête, ou se bloque directement
Solution :
1. Premièrement, vérifiez si votre programme utilise la méthode pconnect, et deuxièmement, vérifiez si le mysql_close() est appelé à temps avant l’exécution de la page. Essayez de ne pas utiliser la méthode pconnect, c’est-à-dire d’utiliser mysql_connect. Lorsque le programme est exécuté, le mysql_close doit être explicitement invoqué
2. Ajouter wait_timeout et interactive_timeout à my.cnf, mettre la valeur plus petite, par défaut la valeur de wait_timeout est 8 heures, vous pouvez la changer en 1 heure, ou une demi-heure. De cette façon, mysql coupera les connexions mortes plus rapidement. Empêcher le nombre total de connexions de dépasser la valeur max_connection.
wait_timeout trop volumineux provoquera la libération d’un grand nombre de processus SLEEP dans MySQL à temps, ce qui ralentira les performances du système, mais si les paramètres sont trop petits, vous pouvez rencontrer des problèmes tels que « MySQL a disparu »
Réglez la valeur de max_connection à une valeur plus élevée, mais ce n’est évidemment pas approprié, plus vous avez de connexions, plus cela met de pression sur votre serveur. En fait, ces connexions sont redondantes, et les éliminer dès que possible est la meilleure politique.
3. Analyser la requête SQL du système étape par étape, trouver le SQL trop lent et l’optimiser
1) interactive_timeout : Signification du paramètre : Le nombre de secondes que le serveur attend pour une activité avant de couper la connexion interactive. Un client interactif est défini comme un client qui utilise CLIENT_INTERACTIVE option dans mysql_real_connect(). Paramètre par défaut : 28800 secondes (8 heures)
(2) wait_timeout : Signification du paramètre : Le nombre de secondes que le serveur attend l’activité avant de fermer la connexion non interactive. Lorsque le thread démarre, la valeur de la wait_timeout de session est initialisée en fonction de la valeur globale wait_timeout ou globale interactive_timeout, selon le type de client (défini CLIENT_INTERACTIVE les options de connexion de mysql_real_connect()). Paramètre par défaut : 28800 secondes (8 heures)
Il existe une limite supérieure au nombre maximal de connexions que MySQL Server peut supporter, car chaque connexion est établie et consomme de la mémoire, donc nous attendons des clients qu’ils se déconnectent et libèrent la mémoire occupée après leur connexion à MySQL Server pour gérer l’opération correspondante. Si votre MySQL Server a un grand nombre de connexions inactives, non seulement ils consommeront de la mémoire en vain, mais si les connexions continuent de s’accumuler et de s’ouvrir, ils atteindront finalement le nombre maximal de connexions dans MySQL Server, ce qui signalera l’erreur « trop de connexions ». La définition de la valeur de la wait_timeout doit être jugée selon le fonctionnement du système. Après que le système a fonctionné pendant un certain temps, vous pouvez vérifier l’état de la connexion du système actuel via la commande montrer la liste des processs, si vous trouvez un grand nombre de processus connectés en état de veille, cela signifie que le paramètre est trop grand, et vous pouvez effectuer les ajustements appropriés pour effectuer des ajustements plus petits.
Commande SQL :
Cette méthode de modification est dansAprès avoir relancé le service mysql, il sera invalide, il est donc préférable de configurer ces deux propriétés dans le fichier de configuration mysql.
Modifie le fichier my.cnf sous Linux :
|