Erreur : SQLSTATE[08004] [1040] Too many connections N° : 1040

Fermé
mimigenie Messages postés 1180 Date d'inscription dimanche 3 janvier 2010 Statut Membre Dernière intervention 4 août 2018 - 13 déc. 2012 à 21:06
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 - 3 janv. 2013 à 15:36
Bonjour,

J'ai un problème qui survient de temps en temps sans que j'en trouve la solution.
Le message suivant apparait à la place de mon site :

Erreur : SQLSTATE[08004] [1040] Too many connections
N° : 1040

Ce qui signifie qu'en théorie il y a trop de connexion mais en pratique c'est impossible.
Pendant environs un mois je n'ai plus eu ce message et là il est revenu.

J'ai entre 70 et 100 visites par jour mais certains jours j'avais plus de 250 visites mais le message n'apparaissait pas.

Pour information, j'ai un serveur mutualisé chez OVH ( le pack de base à 1.99 TTC/mois ) et le nombre de connexion simultanée est de 30.

Je me connecte à ma base de donnée à chaqu'une de mes pages pour pouvoir afficher les commentaires en bas de page mais j'utilise closeCursor() après chaque requête et aujourd'hui j'ai rajouté $bdd = NULL; en pensant que ca change quelque chose mais non.

La seule chose que le support à pu me dire c'est d'optimiser mes requêtes mais je ne vois pas trop comment faire vu que se sont de simple requête.

Voila ce que j'utilise par exemple sur ma page d'accueil pour afficher les news et les derniers commentaires :

<?php
session_start();
try
{
$bdd = new PDO('mysql:host=XXX;dbname=XXX', 'XXX', 'XXX');

?>
<!DOCTYPE html>
<html lang="fr">
<head>
<title>Accueil</title>
<meta charset="iso-8859-1" />

<link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
<?php include("header.php"); ?>
</head>
<body>
<?php include("banniere.php"); ?>
<?php include("menu.php"); ?>

<div id="corps">
<h1>Accueil</h1>

<section>
<table class="tableau_accueil" cellspacing="10" style="margin:-10px;">
<tr>

<td>
<div class="accueil">
Les dernières news :
<?php
// On récupère les cinq dernières news.
$req = $bdd->query('SELECT * FROM news ORDER BY id DESC LIMIT 0, 5');
while ($donnees = $req->fetch())
{
?>
<div class="news">
<h3>
<?php echo $donnees['titre']; ?>
<em>le <?php echo date('d/m/Y à H\hi', $donnees['timestamp']); ?></em> par <?php echo $donnees['auteur']; ?>
</h3>

<p>
<?php
// On enlève les éventuels antislashs, PUIS on crée les entrées en HTML (<br />).
$contenu = nl2br(stripslashes($donnees['contenu']));
echo $contenu;

?>
</p>
</div>
<?php
} // Fin de la boucle des news.
$req->closeCursor();
?>
</div>
</td>
<td>
<div class="accueil">
Les derniers commentaires :
<?php
// On récupère les cinq derniers commentaires.
$req = $bdd->query('SELECT * FROM commentaire ORDER BY id DESC LIMIT 0, 5');
while ($donnees = $req->fetch())
{
?>
<div>
<h3>
<em>Le <?php echo date('d/m/Y à H\hi', $donnees['timestamp']); ?></em>, <?php echo $donnees['pseudo']; ?> a écrit :
</h3>
<p>
<?php
// On enlève les éventuels antislashs, PUIS on crée les entrées en HTML (<br />).
$contenu = stripslashes($donnees['message']);
echo $contenu;
?>
<br /><br />
<?php
$nompage = $donnees['nom_page'];
echo '<a href="'. $nompage . '.php">Voir la page commentée</a> ';

?>
</p>
</div>
<?php
} // Fin de la boucle des news.
$req->closeCursor();
$bdd = NULL;
?>
</div>
</td>
</tr>
</table>
</section>
</div>

<?php include("footer.php"); ?>
<?php
}
catch(Exception $e)
{
echo 'Erreur : '.$e->getMessage().'<br />';
echo 'N° : '.$e->getCode();
}
?>
</body>
</html>

Ne faites pas attention aux commentaires dans le code ^^
Est-ce que vous avez une idée pour résoudre ce problème car ca dure déjà depuis 2 mois et c'est assez embêtant car je n'en trouve pas la source.

Merci d'avance pour votre aide.


1 réponse

JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 3/01/2013 à 15:39
Salut !

Essaye de voir quels processus sont en cours d'exécution lorsque l'erreur apparaît, tu pourra avoir une idée de la source du problème !

http://dev.mysql.com/doc/refman/5.0/fr/show-processlist.html

L'état du serveur aussi !
http://dev.mysql.com/doc/refman/5.0/fr/show-status.html


http://dev.mysql.com/doc/refman/5.0/fr/show-variables.html

Mettez en résolu quand c'est résolu -.- ...
-1