2011-02-17 3 views
2

J'ai trouvé que mon serveur mysql a beaucoup de connexion qui est en veille. je veux les supprimer tous.Comment faire pour supprimer le processus de sommeil dans Mysql

alors comment puis-je configurer mon serveur mysql que de supprimer ou de disposer de la connexion qui est en veille n'est pas en cours de traitement.

sont ce possible de supprimer cette chose dans mysql me dire comment je peux faire à la suite

une connexion permettent qu'une seule fois datareader ouvert et détruire la connexion [processus] après avoir resposnse de requête.

Répondre

5

Pourquoi voudriez-vous supprimer un fil de couchage? MySQL crée des threads pour les demandes de connexion, et lorsque le client se déconnecte, le thread est remis dans le cache et attend une autre connexion.

Cela réduit considérablement les frais de création de threads à la demande, et il n'y a pas à s'inquiéter. Un thread dormant utilise environ 256k de mémoire.

+0

Est-ce leur est pas de problème avec fil de sommeil. Êtes-vous sûr que d'autres connexions que je fais pour le futur n'ont jamais d'effet sur le vieux fil de sommeil. –

+0

Un thread dormant devient actif lorsqu'un nouveau client tente de se connecter. MySQL servira alors le fil de sommeil (en le rendant actif) au client. – JamesHalsall

+2

Non, la connexion "Veille" compte également comme une connexion, et elle aura pour effet de dépasser la connexion maximale possible. – Sadee

2

vous pouvez trouver tous les processus de travail exécuter sql:

show process; 

et vous trouverez le processus de sommeil, si vous voulez y mettre fin, s'il vous plaît rappelez-vous le processid et excute ce sql:

kill processid 

mais en fait, vous pouvez définir une variable de délai d'attente dans my.cnf:

wait_timeout=15 
connect_timeout=10 
interactive_timeout=100 
+0

Eh bien, mon code ouvre beaucoup de blocs de connexion par bloc et je pense qu'ils oublient de fermer la connexion qu'ils ouvrent et ils utilisent encore le processus du serveur, donc je ne peux rien faire. En règle générale, je ne peux modifier que les paramètres de configuration. c'est possible pour moi. bien merci. –

+0

La mise en veille de ce délai ne tue que les processus endormis ou supprime également les processus exécutant un délai supérieur à la temporisation, j'ai défini le délai d'expiration = 30 secondes et une requête ou une procédure prend plus de 30 secondes –

4

Si vous voulez le faire vous manuellement peut faire comme ceci:

Connectez-vous pour Mysql admin:

mysql -uroot -ppassword; 

Et que la commande run:

mysql> show processlist; 

Vous obtiendrez quelque chose comme ci-dessous:

+----+-------------+--------------------+----------+---------+------+-------+------------------+ 
| Id | User  | Host    | db  | Command | Time | State | Info    | 
+----+-------------+--------------------+----------+---------+------+-------+------------------+ 
| 49 | application | 192.168.44.1:51718 | XXXXXXXX | Sleep | 183 |  | NULL    || 
| 55 | application | 192.168.44.1:51769 | XXXXXXXX | Sleep | 148 |  | NULL    | 
| 56 | application | 192.168.44.1:51770 | XXXXXXXX | Sleep | 148 |  | NULL    | 
| 57 | application | 192.168.44.1:51771 | XXXXXXXX | Sleep | 148 |  | NULL    | 
| 58 | application | 192.168.44.1:51968 | XXXXXXXX | Sleep | 11 |  | NULL    | 
| 59 | root  | localhost   | NULL  | Query | 0 | NULL | show processlist | 
+----+-------------+--------------------+----------+---------+------+-------+------------------+ 

Vous allez voir les détails complets des différentes connexions. Maintenant, vous pouvez tuer la connexion de sommeil comme ci-dessous:

mysql> kill 52; 
Query OK, 0 rows affected (0.00 sec) 
Questions connexes