guma: mySQL > mysql_pconnect() Too many connections

Hallo ich bekomme bei jedem 10ten klick auf meiner Webseite folgende Fehlermeldung:

Warning: mysql_pconnect() [function.mysql-pconnect]: Too many connections htdocs/include/mySql.class.php on line 43
Database error: Link-ID == false, pconnect failed
MySQL Error: ()
Session halted.

Gehostet wird die Webseite seit einer Woche bei Strato, davor bestand dieses Problem nie. Ich nutze mySQL 4 und PHP 4

So sieht meine Verbindefunktion in zeile 43 aus:
function verbinde() {
    if ( 0 == $this->intLinkID ) {
      $this->intLinkID=mysql_pconnect($this->strHost, $this->strUser, $this->strPasswort);
      if (!$this->intLinkID) {
        $this->halt("Link-ID == false, pconnect failed");
      }
      if (!mysql_query(sprintf("use %s",$this->strDatenbank),$this->intLinkID)) {
        $this->halt("cannot use database ".$this->strDatenbank);
      }
    }
  }
Kennt jemand die Ursache/Problembehebung?
Grüße Guma

  1. So sieht meine Verbindefunktion in zeile 43 aus:
    function verbinde() {
        if ( 0 == $this->intLinkID ) {
          $this->intLinkID=mysql_pconnect($this->strHost, $this->strUser, $this->strPasswort);
          if (!$this->intLinkID) {
            $this->halt("Link-ID == false, pconnect failed");
          }
          if (!mysql_query(sprintf("use %s",$this->strDatenbank),$this->intLinkID)) {
            $this->halt("cannot use database ".$this->strDatenbank);
          }
        }
      }

    Hi Guma,

    versuch es anstatt mit persistenen Verbindungen mit normalen Mysql-Verbindungen!

    Dazu Zeile:

    $this->intLinkID=mysql_pconnect($this->strHost, $this->strUser, $this->strPasswort);

    in

    $this->intLinkID=mysql_connect($this->strHost, $this->strUser, $this->strPasswort);

    ändern (also das p entfernen).

    1. Danke Sven Rautenberg, danke Nogga,
      ich werde das p bei connect entfernen und testen.

      Was ist auch gemacht habe: Ich hatte drei SQL-Verbindungen in einem PHP-Script und konnte es geschickt auf zwei reduzieren. Jetzt kommt es zu weniger Abbrüchen (bisher sogar keine mehr). Ich bin es nicht gewohnt, dass der Datenbankserver des Providers (STRATO) so schwach ausgelegt ist und daher die maximale Anzahl gleichzeitiger Verbindungen (max_connections) zu schnell erreicht wird. Was passiert nur, wenn ich mal viele Webseitenbesucher bekomme, dann muss ich mit Fehlermeldungen rechnen!? Mal sehen was das P bringt.

      Vielen dank nochmal. Um Strato mache ich besser einen großen Bogen, es gab schon öfters Probleme, die ich so nicht gewohnt war/bin. 1 Jahr ist mein Kunde fest im Vertrag - früher lassen die ihn nicht raus.

      Guma

  2. Moin!

    Hallo ich bekomme bei jedem 10ten klick auf meiner Webseite folgende Fehlermeldung:

    Warning: mysql_pconnect() [function.mysql-pconnect]: Too many connections htdocs/include/mySql.class.php on line 43

    Warum benutzt du pconnect, warum nicht connect?

    Gehostet wird die Webseite seit einer Woche bei Strato, davor bestand dieses Problem nie. Ich nutze mySQL 4 und PHP 4

    MySQL hat eine Maximalzahl erlaubter Verbindungen. Jeder Apache-Prozess baut mit pconnect eine eigene Verbindung zu MySQL auf.

    Das bedeutet:

    1. Man hat von dem angeblichen Performancevorteil sowieso meist nichts, solange ein Apache-Prozess nicht schon eine Verbindung aufgebaut hat. Auf selten besuchten Sites sowieso nicht.

    2. MySQL verbrät einen erheblichen Teil seiner Ressourcen nur damit, unbenutzte Handles offen zu halten, und muß außerdem auf die Zahl der Apache-Prozesse abgestimmt werden.

    Es gilt wieder einmal der wichtige Satz aus dem Handbuch:
    "Warning

    Using persistent connections can require a bit of tuning of your Apache and MySQL configurations to ensure that you do not exceed the number of connections allowed by MySQL."

    Also wirf pconnect raus. Du brauchst es nicht! connect ist in den allermeisten Fällen viel besser. Außerdem hat pconnect einige mögliche Nebenwirkungen, über die man ganz böse stolpern kann - wie in den User-Anmerkungen dokumentiert.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."