Plantage serveur a cause de requettes ?

Résolu
Anthotill Messages postés 127 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 13 mars 2010 - 13 déc. 2005 à 19:48
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 21 déc. 2005 à 14:46
Bonjour à tous !

J'ai un probleme avec un site, il mange toute la mémoire RAM d'un serveur web est le fait planter.

J'aurais aimé savoir ce qui pouvais conduire a se résultat, je me demandais si lorsque l'on oublie plusieurs fois de fermer la connexion a Mysql (mysql_close()) ca pouvais saturer la RAM d'un serveur à un point qu'il plante ?

Merci :)

Antho
A voir également:

60 réponses

Anthotill Messages postés 127 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 13 mars 2010
14 déc. 2005 à 19:29
ok donc si j'en ai besoin en haut mdr je la met en haut ! je vais tester :p

Antho
0
Anthotill Messages postés 127 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 13 mars 2010
14 déc. 2005 à 19:56
oula Antho tu me fais peur la !

ca c'est pas bon :

include('connexion.php'); $sql "SELECT id, marque, cat, nom FROM site_fichetec WHERE cat'".$_GET['cat']."' AND marque ='".$_GET['marque']."'";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
while($data = mysql_fetch_assoc($req))
{

pas bon pas bon ???? lol ne me dis pas que c'est pas bon ?

Antho
0
Anthotill Messages postés 127 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 13 mars 2010
14 déc. 2005 à 20:27
Antho
0
Anthotill Messages postés 127 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 13 mars 2010
14 déc. 2005 à 20:29
dsl pour le message blanc

Ca veux dire que je vais être obligé de réouvrir SQL pour la prochaine requettes alors ? ca va encore plus charger le serveur ?

Antho
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Anthotill Messages postés 127 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 13 mars 2010
14 déc. 2005 à 20:50
J'ai plusieurs requettes différente dans mes pages ...

<?php include('connexion.php');
$sql = "SELECT id, entete, titre, sport, annee, date, heure FROM site_article ORDER BY `id` DESC LIMIT 0 , 4";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
while($data = mysql_fetch_assoc($req))
{
-----------------
<?php
$sql = "SELECT id, date, titre FROM site_article ORDER BY `id` DESC LIMIT 0 , 15";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
while($data = mysql_fetch_assoc($req))
{
-----------------
<?php
$sql = "SELECT id, marque, nom, cat FROM site_fichetec ORDER BY `id` DESC LIMIT 0 , 3";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
while($data = mysql_fetch_assoc($req))
{
-----------------

Si je ferme après chaque requette la connexion, je suis bien obligé de réouvrir la connexion pour la requette suivante ...

alors du coup moi j'ai ouvert qu'une fois puis a la fin j'ai mis ca :

<?php
mysql_close();
exit; ?>

mais ca plante toujours ...

Antho
0
Anthotill Messages postés 127 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 13 mars 2010
15 déc. 2005 à 12:02
Le mysql_freeresult me fais peur car dans la doc ils disent de l'utiliser sous certaines condition

Dailleur, moi je procède ainsi (avec les requettes qu'Antho ma donné) :

<?php
include('connexion.php');


$sql1 = "SELECT id, entete, titre, sport, annee, date, heure FROM site_article ORDER BY `id` DESC LIMIT 0 , 4";
$req1 = mysql_query($sql1) or die('Erreur SQL !
'.$sql1.'
'.mysql_error());


$sql2 = "SELECT id, date, titre FROM site_article ORDER BY `id` DESC LIMIT 0 , 15";
$req2 = mysql_query($sql2) or die('Erreur SQL !
'.$sql2.'
'.mysql_error());


$sql3 = "SELECT id, marque, nom, cat FROM site_fichetec ORDER BY `id` DESC LIMIT 0 , 3";
$req3 = mysql_query($sql3) or die('Erreur SQL !
'.$sql3.'
'.mysql_error());


mysql_close();
mysql_free_result();
?>

puis


<?php
while($data=mysql_fetch_assoc($req1))
{
echo '.....';
}
?>

c'est bien ca ?

Antho
0
Anthotill Messages postés 127 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 13 mars 2010
15 déc. 2005 à 12:53
mysql_free_result($sql1); par exemple ?
ou mysql_free_result($sql1, $sql2); ?

j'ai une erreur quand je l'utilise tout seul et j'attend confirmation pour l'utiliser avec $sql1 (trop peur de tout replanter lol)

Antho
0
Anthotill Messages postés 127 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 13 mars 2010
16 déc. 2005 à 08:47
Merci à tous pour vos conseils et votre aide ! vraiement !

On ma di que les boucles "infinies" pouvaient faire claquer un serveur aussi.

ce que l'on appel boucle c'est les WHILE { } si je ne me trompe pas.

Mais si l'on ne referme pas une boucle le scrit renvois un erreur donc quand on me dit boucles infinies je ne vois pas trop de quoi on parle ... Des fois j'ai besoin d'une boucle qui commence en haut et finit tout en bas de page donc je suis bien obligé de refermer la boucle une fois que j'en ai plus besoin c'est peut etre de ca quon me parle ..

Vous avez une idée pour éviter qu'une boucle reste ouverte trop longtemps ?

Antho
0
Anthotill Messages postés 127 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 13 mars 2010
16 déc. 2005 à 09:50
Merci pour ta réponse

Toute les boucles du site sont simples :
<?php
while($data=mysql_fetch_assoc($req2))
{
//insctructions
}
?>

la seul boucle "compliqué" que j'ai c'est celle d'un script de menu déroulant qui va chercher dans la base la liste à afficher :

<?phpfor ($cpt 0; $ligne mysql_fetch_array($req1); $cpt++)
{
$tab[$cpt]['id'] = $ligne['id'];
$tab[$cpt]['categorie'] = $ligne['categorie'];
$tab[$cpt]['total'] = $ligne['total'];
}
?>
<form name='menu'>
<select NAME="popup" onChange="change_site();" style="background:#E8E8E8; color:#000000" size="1">
<option value=''>Faite votre choix</option>
<?php
for ($cpt = 0; $cpt < count($tab); $cpt++)
{
echo '<option VALUE="telechargements.php?id='.$tab[$cpt]['id'].'&cat='.$tab[$cpt]['categorie'].'">'.$tab[$cpt]['categorie'].'</option>
';
}
?>
</select></form>
<script>
function change_site() {
var site = document.menu.popup.selectedIndex;
{
window.location.href =
document.menu.popup.options[site].value;
}
}
</script>

Tu pense que le problème viens de là ?

Antho
0
Anthotill Messages postés 127 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 13 mars 2010
16 déc. 2005 à 12:25
Non c'est bien des mots que je veux en résultat (dailleurs sa fonctionne ...)

Le script que je vous donne est tout de même correct non ?

Antho
0
Anthotill Messages postés 127 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 13 mars 2010
16 déc. 2005 à 12:29
Malalam :

oui j'ai des grandes boucles, mais je ne vois pas comment faire autrement car il y a plusieurs requettes dans mes pages donc je suis obligé de conclure la boucle ou je n'en es plus besoin ...

Antho
0
Anthotill Messages postés 127 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 13 mars 2010
16 déc. 2005 à 16:59
Parse error: parse error, unexpected T_WHILE, expecting ';' in /home/autointe/www/menu_droit.php on line 81

for ($cpt=0;while($ligne = mysql_fetch_array($req1))
{
tab[$cpt]['id'] = $ligne['id'];
$tab[$cpt]['categorie'] =
$ligne['categorie'];
$tab[$cpt]['total'] =
$ligne['total'];
$cpt=$cpt+1;
}

ya une erreur :s jessaye de la résoudre mais si quelqu'un trouve avant moi :p lol

Antho
0
Anthotill Messages postés 127 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 13 mars 2010
16 déc. 2005 à 19:39
Merci à tous pour votre aide !!!

La fluidité c'est très nettement amélioré et le code est plus propre merci merci merci !

Antho, Fhx, malalam, pichpoich MERCCCCCIIIIIIIIIIIIIII ;)

PS: je sais on dirais un gogol mais au moins le message est passé :)

Antho
0
Anthotill Messages postés 127 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 13 mars 2010
16 déc. 2005 à 19:49
Avant de cloturer tout ca, pouvez vous me dire si 4000 requettes en un jour c'est beacoup pour un site ?

Merci :)
Antho

Antho
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
16 déc. 2005 à 20:27
C'est surtout le nombre de requete par page qui est importante... pas par mois, ca ne veut rien dire :o
0
pichpoich Messages postés 26 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 29 janvier 2009
16 déc. 2005 à 20:29
ce fut un plaisir de te filer un coup de main, tout petit d'ailleurs, figure toi qu'en trois jours, j'ai appris plus que jamais avant sur la façon de faire des requettes.
Quand au reste, je ne suis pas vraiment compétent.
A plus.
0
Anthotill Messages postés 127 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 13 mars 2010
16 déc. 2005 à 20:40
Fhx comment je peux savoir combien de requettes j'exécute par pages ?
Combien ne faut il pas dépasser pour rester dans le domaine du raisonable ?

:-) merci

Antho
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
16 déc. 2005 à 23:04
Et encore le nombre de requêtes c'est pas spécialement important, faut qu'elles soient bien conçues. je me souviens d'une fois je suis passé de 5 à 20 requêtes sur la page d'accueil de mon forum et les temps de génération ont été divisés par 4. Bon depuis j'ai largement moins de requêtes tout en ayant des temps encore inférieurs car à l'époque l'archi était naze mais bon...

0
Anthotill Messages postés 127 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 13 mars 2010
17 déc. 2005 à 08:34
Salut Antho.

Maintenant toute mes requettes fonctionnent comme tu m'as dit :

<?php
include('connexion.php');
$sql1 = "SELECT MON_SELECT FROM MA_TABLE";
$req1 = mysql_query($sql1) or die('Erreur SQL !
'.$sql1.'
'.mysql_error());


$sql2 = "SELECT MON_SELECT FROM MA_TABLE";
$req2 = mysql_query($sql2) or die('Erreur SQL !
'.$sql2.'
'.mysql_error());


mysql_close();
?>
-------------------------------------------
<?php
while($data = mysql_fetch_assoc($req1))
{
//
}
?>

Ca a le mérite d'être plus clair dans le code et je pense que ma page s'affiche plus rapidement mais je peux pas le prouver :)

Antho
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
21 déc. 2005 à 14:46
Bah tu verras mais bon je pense pas que l'affichage soit ralenti. tu as différentes sources te permettant de faire des benchmarks si nécessaire ;-)

a +



<HR width="100%" SIZE=2>



<LI>
0
Rejoignez-nous