2012-08-30 4 views
53

Quand je lance SHOW PROCESSLIST dans la base de données MySQL, je reçois cette sortie:SHOW PROCESSLIST en commande MySQL: le sommeil

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 le commandement. Qu'est-ce que ça veut dire? Pourquoi il fonctionne depuis longtemps et montre NULL? Cela ralentit la base de données et quand je mets fin au processus, cela fonctionne normalement. Aidez-moi, s'il vous plaît.

+0

il ne fait rien il se trouve juste là et "attend" pour une connexion. – Rufinus

+1

pouvons-nous trouver quelle requête est en attente de connexion? Est-ce que mon ça a du sens? ET pourquoi ralentit-il ma base de données? – gthm

+0

Est-ce que cela ralentit * vraiment * votre base de données? il ne fait rien. C'est fondamentalement une connexion qui ne fait rien - par exemple, vous avez peut-être connecté sur un autre terminal un certain temps, et ne se déconnecte pas – BugFinder

Répondre

41

Ce n'est pas une requête en attente de connexion, il est un pointeur de connexion attendant le délai d'expiration.

Cela n'a aucun impact sur les performances. La seule chose qu'il utilise est de quelques octets comme le fait chaque connexion. Le pire des cas c'est l'utilisation d'une connexion de votre pool, si vous vous connectez plusieurs fois via le client console et que vous fermez le client sans fermer la connexion, vous pouvez utiliser toutes vos connexions et attendre que le timeout soit capable de se connecter à nouveau ... mais cela est très peu probable :-)

Voir MySql Proccesslist filled with "Sleep" Entries leading to "Too many Connections"? et https://dba.stackexchange.com/questions/1558/how-long-is-too-long-for-mysql-connections-to-sleep pour plus d'informations.

+0

Le problème peut être si vous avez des connexions limitées à la base de données. Parce que même ces connexions n'ont pas d'impact sur les performances, elles comptent toujours comme une connexion. – mrded

14

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

Cela peut inclure des pools de connexions créés par des structures 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 d'où vient la connexion.

(CAVEAT: Si vous aviez une longue liste de ces types de connexions, il pourrait y avoir un danger de manquer de connexions simultanées.)

0

Sommeil signifiant que le fil ne fait rien. Le temps est trop long requête beacuse anthor thread, mais pas déconnecter le serveur, par défaut wait_timeout = 28800, de sorte que vous pouvez définir des valeurs plus petites, par exemple 10. aussi vous pouvez tuer le fil.

Questions connexes