97 votes

SHOW PROCESSLIST dans la commande MySQL : sleep (dormir)

Lorsque j'exécute SHOW PROCESSLIST dans la base de données MySQL, j'obtiens ce résultat :

mysql> show full processlist;

+--------+------+-----------+--------+---------+-------+-------+-----------------------+
| Id     | User | Host      | db     | Command | Time  | State | Info                  |
+--------+------+-----------+-------+---------+-------+-------+-----------------------+
| 411665 | root | localhost | somedb | Sleep   | 11388 |       | NULL                  | 
| 412109 | root | localhost | somedb | Query   |     0 | NULL  | show full processlist | 
+--------+------+-----------+-------+---------+-------+-------+------------------------+

Je voudrais connaître le processus "Sleep" qui est sous Commande. Que signifie-t-il ? Pourquoi fonctionne-t-il depuis longtemps et affiche-t-il NULL ? Il ralentit la base de données et lorsque je tue le processus, elle fonctionne normalement. Veuillez m'aider.

85voto

Rufinus Points 8148

Il ne s'agit pas d'une requête en attente de connexion, mais d'un pointeur de connexion qui attend la fin du délai d'attente.

Il n'a pas d'impact sur les performances. La seule chose qu'elle utilise est quelques octets, comme le font toutes les connexions.

Le pire des cas : Il utilise une connexion de votre pool ; Si vous vous connectez plusieurs fois via le client de la console et que vous fermez le client sans fermer la connexion, vous pourriez utiliser toutes vos connexions et devoir attendre le timeout pour pouvoir vous connecter à nouveau... mais c'est très peu probable :-)

Véase La liste de processus MySql est remplie d'entrées "Sleep", ce qui entraîne "trop de connexions" ? y https://dba.stackexchange.com/questions/1558/how-long-is-too-long-for-mysql-connections-to-sleep pour plus d'informations.

30voto

Drew Points 993

Les connexions à l'état "dormant" sont le plus souvent créées par du code qui maintient des connexions persistantes à la base de données.

Il peut s'agir de pools de connexion créés par des cadres d'application ou d'outils d'administration de bases de données côté client.

Comme mentionné ci-dessus dans les commentaires, il n'y a vraiment aucune raison de s'inquiéter de ces connexions... à moins bien sûr que vous n'ayez aucune idée de l'origine de la connexion.

(ATTENTION : Si vous aviez une longue liste de ce type de connexions, il pourrait y avoir un danger de manquer de connexions simultanées).

5voto

Antony Points 1408

J'ai trouvé cette réponse ici : https://dba.stackexchange.com/questions/1558 . En bref, l'utilisation des éléments suivants (ou dans my.cnf) supprimera le problème de délai d'attente.

SET GLOBAL interactive_timeout = 180; SET GLOBAL wait_timeout = 180;

Cela permet de mettre fin aux connexions si elles restent en état de veille pendant 3 minutes (ou ce que vous avez défini).

0voto

ding Points 11

Dormir signifie que ce fil ne sert à rien. Le temps est trop long parce que le thread anthor interroge le serveur, mais ne le déconnecte pas, par défaut wait_timeout=28800 ; vous pouvez donc définir des valeurs plus petites, par exemple 10. Vous pouvez également tuer le thread.

0voto

Radu Ursacescu Points 1

Sleep signifie que la connexion à la base de données n'est pas en cours de traitement mais qu'elle n'est pas encore libérée - hostmama.ro

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X