Dois-je m'inquiéter du processus d'état de sommeil mysql dans processlist

11

Pendant le fonctionnement du site Web, dans la liste des processus mysql, je vois quelques processus avec la colonne "commande" marquée comme "SLEEP".

Dois-je m'inquiéter? Comment arrêter ça?

Hao
la source

Réponses:

17

Même les plus puissants d'entre nous ont parfois besoin de dormir. Sans sommeil, on devient anxieux et l'insomnie peut entraîner toutes sortes de symptômes graves.

Plus sérieusement: l'état de veille signifie que le processus MySQL a terminé sa requête, mais le côté client n'est pas encore sorti. De nombreuses applications Web ne nettoient pas leurs connexions par la suite, ce qui entraîne la mise en veille des processus MySQL. Ne vous inquiétez pas s'il n'y en a qu'une poignée; MySQL nettoiera ceux-ci après un délai d'expiration configurable (wait_timeout).

Ou si votre application Web utilise des connexions persistantes et un pool de connexions, alors il est parfaitement normal d'avoir même beaucoup de processus en veille: dans ce cas, votre application ouvre simplement par exemple 100 connexions SQL et les maintient ouvertes. Cela réduit les frais généraux d'ouverture / fermeture de la connexion. À moins que votre application ne soit très chargée, il est normal que presque tous les processus SQL n'aient pas quelque chose à faire, alors ils dorment.

Janne Pikkarainen
la source
5

Non, ne vous en faites pas à moins que vous n'en ayez des milliers. Habituellement, ils indiquent une connexion à une base de données qui ne fait actuellement rien, mais qui est sinon toujours en vie.

De nombreux sites Web sont construits de telle sorte qu'au début du traitement d'une page, une connexion à la base de données est ouverte, puis utilisée tout au long de la génération de la page et finalement supprimée à la fin. Si l'élimination est effectuée correctement, la connexion à la base de données est fermée et le serveur va alors tuer le thread approprié, ce qui signifie que cette connexion disparaît de la liste des processus.

Si la connexion n'est pas fermée, elle peut rester dans l'état "SLEEP" jusqu'à ce qu'elle expire. Dans ce cas, vous pouvez vous retrouver avec beaucoup de processus de sommeil. mais à moins que vous ne rencontriez des problèmes de mémoire sur le serveur db, ce n'est pas un gros problème non plus.

Wolfgangsz
la source
3

Avant d'augmenter la variable max_connections, vous devez vérifier le nombre de connexions non interactives dont vous disposez en exécutant la commande show processlist.

Si vous avez plusieurs connexions en veille, vous devez diminuer la valeur de la variable "wait_timeout" pour fermer la connexion non interactive après avoir attendu quelques fois.

  • Pour afficher la valeur wait_timeout:
AFFICHER LES VARIABLES DE SESSION COMME 'wait_timeout';

+ --------------- + ------- +
| Nom_variable | Valeur |
+ --------------- + ------- +
| wait_timeout | 28800 |
+ --------------- + ------- +

la valeur est en seconde, cela signifie que la connexion non interactive peut encore durer jusqu'à 8 heures.

  • Pour modifier la valeur de la variable "wait_timeout":
SET session wait_timeout = 600;
Requête OK, 0 lignes affectées (0,00 sec)

Au bout de 10 minutes si la connexion de sommeil dort toujours le mysql ou MariaDB abandonne cette connexion.

S.Bao
la source