1 votes

Requêtes dormantes MySQL

Lorsque show full processlist ; renvoie un certain nombre de requêtes d'état "sleep" avec une colonne de temps de 0, quelle pourrait en être la cause ? Comment MySQL décide-t-il réellement si une connexion doit être mise en veille ou non ? L'application qui communique avec MySQL n'utilise pas de connexions persistantes.

5voto

Dan Carley Points 24959

L'état de veille indique simplement une connexion inactive. C'est un client qui est connecté mais qui n'effectue aucune requête.

Je vous suggère de vérifier que votre application ferme tous les threads MySQL non utilisés dès qu'elle en a terminé, même si vous n'utilisez pas de connexions persistantes.

Les connexions inactives peuvent être "contrôlées" côté serveur avec la variable wait_timeout . Mais il est préférable de trouver la cause profonde du problème.

0 votes

+1 Tout à fait d'accord sur la cause première.

2voto

msanford Points 1427

Qu'est-ce que vous obtenez quand vous

mysql> show global variables like "wait%";

Essayez de le réduire en éditant my.cnf, ou avec le code suivant (en tant que root)

mysql> SET GLOBAL wait_timeout=28801;

Il existe un bon article sur (l'excellent) MySQL Performance Blog qui traite des requêtes dormantes. http://www.mysqlperformanceblog.com/2007/02/08/debugging-sleeping-connections-with-mysql/

Cela vaut également la peine de jeter un coup d'œil http://rackerhacker.com/2007/05/20/mysql-connections-in-sleep-state/

Une autre réflexion en relisant le commentaire de Dan : Le temps de sleep(0) est étrange, cependant. Cela me semble indiquer qu'il y a des connexions persistantes qui ne dorment pas vraiment, mais qui font quelque chose au moins toutes les secondes pour réinitialiser le timer. Si vous savez que la webapp n'utilise pas de connexions persistantes, peut-être appelle-t-elle sleep() directement, quelque part dans une boucle ou une fonction de temporisation ?

En outre, Si vous utilisez, par exemple, PHP, vous pouvez entrer dans le php.ini et définir les paramètres suivants mysql.allow_persistent = Off et voir ce qui se passe.

PS : Quelle version de MySQL utilisez-vous ? Quelque chose de similaire a été signalé comme un bogue sérieux dans la version 4.1, mais c'était en 2005...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X