Thread MySQL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Thread MySQL

par Ov6rMinD » 05 juin 2006, 16:37

Je vais choisir l'option que vous me donnez avant celle que j'avais en tête ^^

Mais je doute que cela change tout....

Enfin qui ne tente rien n'a rien !

par Vorkosigan » 05 juin 2006, 15:35

j'vais m'sucider, tiens, ce sera plus simple....
La solution est simple : ferme tes connexions et ca ira beaucoup mieux :D

par Ov6rMinD » 05 juin 2006, 14:39

j'vais m'sucider, tiens, ce sera plus simple....

par Vorkosigan » 05 juin 2006, 13:53

La connexion est fermée, non ?
La connexion oui, mais pas forcemment le thread. Celui-ci reste en effet ouvert (en mode "dormant") et peut etre reutilise vu que sa connexion a ete fermee.

par Ov6rMinD » 05 juin 2006, 12:51

Script pêché sur le net :
<html><head><title>Moniteur MYSQL</title>
<style>table{font-family:verdana;font-size:8pt}</style>
</head><body>
<center><table border="0" cellspacing="0" cellpadding="0"><tr><td valign="top">
<table width="90%" border="1" cellspacing="0" cellpadding="0">
<?php
$link  = mysql_connect('localhost', 'pcreation', '3ph529ec');
$result = mysql_query('SHOW STATUS', $link);
$nb = 0;
while ($row = mysql_fetch_assoc($result)) {
  $nb = $nb+1;
  if (($nb == "29") || ($nb == "57") || ($nb == "85")) {
	echo "</table></td><td valign=top><table width=\"90%\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\">";
	echo '<tr><td>&nbsp;' . $row['Variable_name'] . '</td><td><b>&nbsp;' . $row['Value'] . "</td></tr>";
  } else {
	echo '<tr><td>&nbsp;' . $row['Variable_name'] . '</td><td><b>&nbsp;' . $row['Value'] . "</td></tr>";
  }
}
mysql_close($link);
?>
</table></td></tr></table></body></html> 
La connexion est fermée, non ?

par Vorkosigan » 05 juin 2006, 12:42

Mais je ne comprend toujours pas comment cela se fait que :
Threads_connected 53
alors que je suis le seul à connaître la page de monitoring et que AUCUNE autre page du site n'est accessible. Et bien sûr le taux de Threads_connected augmente encore... et la connexion est fermée à la fin de la page de monitoring...
Et en localhost, tout est OK ! Threads_connected = 1 !!! Quelque soit mes actions !
C'est tout simplement parce que dans ta page de monitoring tu ouvres des connexions que tu ne fermes pas... et a chaque "refresh", tu ouvres de nouvelles connexions. Ca se cumule.
En localhost, tu dois certainement etre connecte en Admin, j'imagine, ou bien tes timeouts sont plus courts.

par Ov6rMinD » 05 juin 2006, 12:29

Merci,
Actuellement, je suis en train de réécrire mon code (très long) pour fermer tous les accès à la base de données.

Mais je ne comprend toujours pas comment cela se fait que :
Threads_connected 53
alors que je suis le seul à connaître la page de monitoring et que AUCUNE autre page du site n'est accessible. Et bien sûr le taux de Threads_connected augmente encore... et la connexion est fermée à la fin de la page de monitoring...
Et en localhost, tout est OK ! Threads_connected = 1 !!! Quelque soit mes actions !

par Vorkosigan » 05 juin 2006, 12:24

Peux-tu me faire un léger exposé ? ^^
Comment éviter les multiples Threads ?
mysql_close() ne s'applique qu'aux connexions, c'est ça ?
Et qu'est-ce que les process ?
A vrai dire, le mieux c'est quand meme de lire la doc MySQL.

Neanmoins voici un bref apercu de la chose....
Par defaut, MySQL n'a qu'un seul process qui tourne reserve a l'admin. Si un client se connecte et n'a pas les droits d'admins, une deuxieme connexion est creee.
A chaque fois que dans ton code PHP tu ouvres une connexion vers MySQL, un thread est créé sur ce 2eme process. Donc si tu as 50 clients qui essaient d'afficher une page a un moment donné, tu auras 50 threads ouverts.
Si tu ne fermes pas tes connexions dans ton code (entres autres), tes threads et tes connexions resteront actifs...
je viens de mettre un htaccess sur le serveur pour que seule la page de monitoring soit accessible, les autres URL sont renvoyées sur un autre site. Je ne devrai avoir qu'un Thread, non ? Ce n'est pas le cas.... cela bouge pas mal.
Non, pas forcemment. Si 10 personnes sont connectes a la page de monitoring tu auras 10 threads...
Et si tu ne fermes pas tes connexions dans ton code, tu pourras en avoir des dizaines...

Enfin plutot que d'essayer de comprendre, tu devrais expliquer ce que tu fais... et SURTOUT verifier que tu fermes bien tes connexions dans ton code PHP.

par Ov6rMinD » 05 juin 2006, 11:49

Peux-tu me faire un léger exposé ? ^^

Comment éviter les multiples Threads ?
mysql_close() ne s'applique qu'aux connexions, c'est ça ?
Et qu'est-ce que les process ?

Merci ^^

JMD
EDIT : Encore une question.... je viens de mettre un htaccess sur le serveur pour que seule la page de monitoring soit accessible, les autres URL sont renvoyées sur un autre site. Je ne devrai avoir qu'un Thread, non ? Ce n'est pas le cas.... cela bouge pas mal.

par Vorkosigan » 05 juin 2006, 11:46

Non, ce n'est pas specialement bizarre :
- tu as un process en attente de requete
- un qui vient d'executer ta requete
Mais je ne devrais pas en avoir plus si j'ai un Threads_connected à plus de 60 ?
Non, tu fais une confusion entre threads/connexions et processes.

par Ov6rMinD » 05 juin 2006, 11:41

Non, ce n'est pas specialement bizarre :
- tu as un process en attente de requete
- un qui vient d'executer ta requete
Mais je ne devrais pas en avoir plus si j'ai un Threads_connected à plus de 60 ?

par Vorkosigan » 05 juin 2006, 11:39

Ce qui est aussi bisare, c'est la réponse de SHOW PROCESSLIST :
377752 pcreation localhost table1 Sleep 4 NULL
377753 pcreation localhost table2 Query 0 NULL show processlist
Non, ce n'est pas specialement bizarre :
- tu as un process en attente de requete
- un qui vient d'executer ta requete

par Ov6rMinD » 05 juin 2006, 11:37

Sans savoir comment toi et tes visiteurs utilisez ta base, il est difficile de savoir s'il s'agit d'un probleme ou non. Meme si a priori oui. :wink:

On peut quand meme supposer que :
- tu ouvres des connexions a la base mais que tu ne les refermes pas apres avoir fini de les utiliser => d'ou la hausse
- au bout de plusieurs minutes, tu as un timeout sur les connexions ouvertes qui fait que cela baisse
Mais alors j'aurais le même problème en local, non ? Car ce n'est pas le cas !

par Ov6rMinD » 05 juin 2006, 11:34

Ce qui est aussi bisare, c'est la réponse de SHOW PROCESSLIST :
377752 pcreation localhost table1 Sleep 4 NULL
377753 pcreation localhost table2 Query 0 NULL show processlist

par Vorkosigan » 05 juin 2006, 11:34

Ce qui est bisare, c'est que dès que je réactualise mes stats, Threads_connected augmente, mais pas forcément de 1. C'est comme si ça augmentait en boucle, et dès que Threads_connected atteind 100, erreur Too many connections et finalement au bout de quelques mnutes, ça repart avec une valeur de Threads_connected basse...
Sans savoir comment toi et tes visiteurs utilisez ta base, il est difficile de savoir s'il s'agit d'un probleme ou non. Meme si a priori oui. :wink:

On peut quand meme supposer que :
- tu ouvres des connexions a la base mais que tu ne les refermes pas apres avoir fini de les utiliser => d'ou la hausse
- au bout de plusieurs minutes, tu as un timeout sur les connexions ouvertes qui fait que cela baisse