web-dev-qa-db-fra.com

SHOW PROCESSLIST dans la commande MySQL: sleep

Lorsque je lance SHOW PROCESSLIST dans la base de données MySQL, j'obtiens cette sortie:

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 savoir le processus "Sleep" qui est sous le commandement. Qu'est-ce que ça veut dire? Pourquoi fonctionne-t-il depuis longtemps et affiche NULL? Cela ralentit la base de données et lorsque je tue le processus, cela fonctionne normalement. Aidez-moi, s'il vous plaît.

66
gthm

Ce n'est pas une requête en attente de connexion; c'est un pointeur de connexion qui attend la fin du délai d'attente. 

Cela n'a pas d'impact sur les performances. La seule chose qu'il utilise est quelques octets comme chaque connexion. 

Le pire des cas: il utilise une connexion de votre piscine; Si vous vous connectez plusieurs fois via le client de la console et fermez simplement le client sans fermer la connexion, vous pouvez utiliser toutes vos connexions et attendre le délai pour pouvoir vous reconnecter ... mais c'est très peu probable :-) 

Voir La liste de contacts MySql remplie avec les entrées "Sleep" qui mènent à "Trop de connexions"? et https://dba.stackexchange.com/questions/1558/how-long-is-too-long-for-mysql-connections-to-sleep pour plus d'informations.

51
Rufinus

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

Cela peut inclure des pools de connexions créés par des infrastructures d'application ou des outils d'administration de base 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.

(CAVEAT: Si vous avez une longue liste de ces types de connexions, vous risquez de manquer de connexions simultanées.)

19
Drew

J'ai trouvé cette réponse ici: https://dba.stackexchange.com/questions/1558 . En bref, l’utilisation de ce qui suit (ou dans my.cnf) résoudra le problème du dépassement de délai.

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

Cela permet aux connexions de se terminer si elles restent dans un état de veille pendant 3 minutes (ou ce que vous définissez).

0
Antony

Sleep signifie que le fil ne fait rien . Le temps est trop grand car la requête du fil est différente, mais ne déconnecte pas le serveur. le fil.

0
ding