MySQL max_user_connections'

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik heb een vraagje. Ik krijg op mijn website steeds de melding:
"User XX already has more than 'max_user_connections' active connections"

Nu zie ik dat mijn provider het aantal toegestanden connections op 26 staat.
Onze site heeft ongeveer 40.000 unieke bezoekers per maand met ongeveer '400.000' hits.

Ik maak verbinden met de database bovenaan mijn pagina en sluit de connectie onderaan de pagina.
Is dit normaal dat ik deze melding krijg of moet ik het probleem ergens anders zoeken?

Heb al mijn mijn provider hierover gebeld maar die zegt dat 20 connections al 'erg' veel is.
hoef geen antwoord op het probleem maar wil eigenlijk meer weten of ik mijn script moet aanpassen of dat de provider zijn aantal moet verhogen..

Acties:
  • 0 Henk 'm!

  • Sypher
  • Registratie: Oktober 2002
  • Nu online
Hoe verbind je naar MySQL? Via mysql_connect of mysql_pconnect?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
verbinden doe ik middels:
$db=mysql_connect($host, $username, $password) or die (mysql_error());

Acties:
  • 0 Henk 'm!

  • Sypher
  • Registratie: Oktober 2002
  • Nu online
mysql_pconnect laat namelijk de connectie open en hergebruikt deze. In principe zou je dus met 1 user-connection afkunnen..

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hmm.

Ik heb er nu een p voor gezet maar krijg na een paar clicks al weer de melding te zien... is het voor mij als webmaster mogelijk in te zien hoeveel en met wie mijn mysql database verbinding heeft?

Acties:
  • 0 Henk 'm!

  • KoosDijk
  • Registratie: Januari 2008
  • Laatst online: 14-09 21:46
Verwijderd schreef op vrijdag 13 november 2009 @ 09:10:
verbinden doe ik middels:
$db=mysql_connect($host, $username, $password) or die (mysql_error());
Je maakt toch niet voor iedere query een nieuwe verbinding?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik include bovenaan de pagina de connection middels:
include ("includes/include_config.php");

en helemaal onderaan elke pagina include ik:
include ("includes/closeconnection.php");

in de pagina's zelf staan op bepaalde plekken:
$query = "bla bla bla";
$result = mysql_query($query) or die($query);

lijkt mij goed toch?

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Sypher schreef op vrijdag 13 november 2009 @ 09:12:
mysql_pconnect laat namelijk de connectie open en hergebruikt deze. In principe zou je dus met 1 user-connection afkunnen..
Hergebruik != concurrent door elkaar heen.

Bij een grote site mag het, zeker op de drukke momenten best wel iets hoger ingesteld zijn. Evenwel kan je bedenken of je het symptoom ook weg zou kunnen krijgen door het eea te optimaliseren, zodat elke request sneller klaar is. :)
Verwijderd schreef op vrijdag 13 november 2009 @ 09:20:
$result = mysql_query($query) or die($query);
Nee, die die($query) hoort niet in productie code.

[ Voor 16% gewijzigd door Voutloos op 13-11-2009 09:24 ]

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ah.. ik ben er al achter.. ik heb een pagina met bovenin de connectie.
en deze pagina verwijst steeds naar zichzelf met wijzigingen..
in elke stap staan meedere query's die worden uitgevoerd.

dus zoiets:

include connection.

deel 1
na formulier send ga naar stap 2

deel 2
na verwijderen ga naar stap 3

deel 3
na deelname accoord ga naar stap 4

deel 4
na bla bla bla stap 5

deel 5
na wissel ga naar stap 1

close functie

Ik snap alleen nog niet waarom hij die close functie niet goed uitvoerd...

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Volgens mij heb je het over losse requests? Het einde van je script is een impliciete close.

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Het is al gezegd maar
code:
1
$result = mysql_query($query) or die($query);

Moet je nooit doen.

Acties:
  • 0 Henk 'm!

  • PeterSelie
  • Registratie: December 2002
  • Laatst online: 14:19
Dergelijke dingen zouden nooit in een live-omgeving voor mogen komen, evenmin als eventuele debug-codes. Deze dingen behoren netjes in een logje te worden weggeschreven.

code:
1
$result = mysql_query($query) or $db->handleLog('Error: could not handle query: '.$query);

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ja dat snap ik. maar het is een admin module waar enkel ik in kan en een collega. dus vind het niet zo erg dat het blijft staan.. wat me meer zorgen maakt is dat hij toch steeds weer een nieuwe connectie maakt met de database bij elke refesh. terwijl ik toch bij elke pagina de opdracht geef de databaseverbinding te verbreken na het uilezen van alle query's

Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-09 14:32

André

Analytics dude

Move naar Programming

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op vrijdag 13 november 2009 @ 10:36:
ja dat snap ik. maar het is een admin module waar enkel ik in kan en een collega. dus vind het niet zo erg dat het blijft staan..
Cognietieve dissonantie. Gewoon nooit doen en alles op dezelfde manier voor jezelf loggen, is nog makkelijker ook.

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op vrijdag 13 november 2009 @ 10:36:
ja dat snap ik. maar het is een admin module waar enkel ik in kan en een collega. dus vind het niet zo erg dat het blijft staan.. wat me meer zorgen maakt is dat hij toch steeds weer een nieuwe connectie maakt met de database bij elke refesh. terwijl ik toch bij elke pagina de opdracht geef de databaseverbinding te verbreken na het uilezen van alle query's
Tsja, als je gegevens nodig hebt uit de database, moet je toch echt een verbinding hebben. Ik snap niet waarom dat een probleem zou zijn.

In php heeft normaalgesproken elke request zijn eigen databaseverbinding. Die maak je zelf aan met je *_connect functie, en het verbreken gaat automatisch, al can je ook *_close gebruiken. Persistente connecties (mysql_pconnect bijvoorbeeld) zorgt er juist voor dat een verbinding open blijft nadat een request is afgerond, zodat dezelfde verbinding bij een volgende request weer opnieuw gebruikt kan worden. Dit maakt jouw specifieke probleem alleen maar erger, of in ieder geval niet beter.

Je moet er voor zorgen dat je je verbindingen zo kort mogelijk nodig hebt. Maak je code efficienter of verbreek de verbinding nadat je alle queries hebt uitgevoerd (maar nog wel ander werk moet doen, een mysql_close vlak voordat je script toch al stopt heeft geen toegevoegd nut).

Het kan natuurlijk ook zo zijn dat de server waarop je site en/of database draait gewoon te traag is. Probeer te upgraden naar een groter pakket, of zoek een andere hosts. Dat je niet genoeg hebt aan 26 database-verbindingen lijkt me vooral een symptoom van een groter probleem (requests duren te lang) dan een probleem op zich.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben er achter dat de connections niet worden gesloten maar zie in my show processlist dat ze dus blijven staan op de 'sleep' stand en deze worden na 120 seconden automatisch gedisconnect...

maar ik zie nog niet in waarom ze in 'sleep' raken. ga ff google'n maar dan weten jullie hier op het forum waar het weg komt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hmm. op mijn eigen server met mysql versie 5.0.19 gaat alles goed.
online draait echter mysql versie 5.0.45.

Iemand een idee dat het daar aan kan liggen??

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Verwijderd schreef op vrijdag 13 november 2009 @ 11:49:
Ik ben er achter dat de connections niet worden gesloten maar zie in my show processlist dat ze dus blijven staan op de 'sleep' stand en deze worden na 120 seconden automatisch gedisconnect...

maar ik zie nog niet in waarom ze in 'sleep' raken. ga ff google'n maar dan weten jullie hier op het forum waar het weg komt.
Het zal toch wel komen omdat je per ongeluk mysql_pconnect gebruikt ergens. Je moet echt heel groot zijn wil je tegen de limiet aanlopen, mits je geen inefficiënte dingen doet in je db.
Pagina: 1