[mysql/php] Connectie openen en sluiten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Ik vraag me al een hele tijd af wat nu het beste is om te doen voor het openen van een connectie van mysql met behulp van php. In de documenten kan ik er namelijk niks over vinden en zoeken heeft me ook niks opgeleverd (kan komen dat ik niet weet waar ik op moet zoeken).

Het zit namelijk zo, op een druk bezochte site heb ik middels mysqltuner ed geprobeerd om een en ander te tunen echter zonder merkbaar resultaat. Op de server draaien meerdere websites, waarvan er twee redelijk druk bezocht zijn. Ongeveer 35.000 unieke bezoekers en 200.000 pageviews per dag. Per pagina worden ongeveer 5 queries gedraaid welke volgens mij allemaal gebruik maken van indices op een redelijk juiste manier.

Echter per query open ik nu een connectie naar mysql toe en sluit deze meteen na de query. Als ik dus zeg maar 5 queries per pageview heb, gebeurt dit dus ook 5 keer.

Nu vraag ik me al heel lang af of dit wel verstandig is of kan ik beter per pageview 1x de connectie openen en aan het einde van de pagina weer sluiten. Het is misschien een hele knullige vraag, maar zou iemand mij misschien hier iets meer over kunnen vertellen.

De server heeft namelijk rond de spitsuren een redelijk hoge load, in mijn ogen een te hoge load en ik kom maar niet achter de oorzaak. In de spitsuren duurt het opvragen van een pagina soms ook best lang.

Bij mysql tuner staat nu alles op OK alleen de lock / wait ratio is te hoog en dan staat erbij dat ik gebruik moet gaan maken van innodb. Dit heb ik ook geprobeerd, maar dat is ook niet de oplossing.

Nu dacht ik dat misschien bovenstaande probleem de oorzaak kan zijn, maar voordat ik alles ga aanpassen (best veel werk) zou ik eerst graag willen vragen of iemand hier iets meer over kan vertellen.

Acties:
  • 0 Henk 'm!

  • dev10
  • Registratie: April 2005
  • Laatst online: 18-09 19:18
Hoe verbind je met de databaseserver? Door middel van mysql_connect()?

Het is in PHP namelijk niet nodig om de verbinding na gebruik te sluiten. Alle resources waar geen reference meer naar bestaat worden door de garbage collector automatisch verwijderd.

Verder is het zinnig gewoon te gaan meten waar PHP er lang over doet om de pagina te laden. Dan kun je aan de hand daarvan kijken wat er aangepast moet worden.

Acties:
  • 0 Henk 'm!

  • Chesta
  • Registratie: November 2004
  • Laatst online: 27-08 06:55
Je hoeft maar 1x per pageview een verbinding met MySQL te maken

End of Transmission


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

RSD schreef op dinsdag 12 april 2011 @ 14:05:
Echter per query open ik nu een connectie naar mysql toe en sluit deze meteen na de query. Als ik dus zeg maar 5 queries per pageview heb, gebeurt dit dus ook 5 keer.
:X

Je maakt een geintje hoop ik? Je kan toch wel aan je water voelen dat dit geen goed idee is?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Maethor2
  • Registratie: Augustus 2010
  • Laatst online: 12-06-2024
Uiteraard zal een connectie vijf keer openen en sluiten langer duren dan één keer openen en één keer sluiten. De vraag die je moet stellen is wat de bottleneck is op je pagina's. Zijn het misschien slecht opgestelde queries, de connecties of iets buiten je database om.

Een enkele connectie maken moet je normaal gezien wel een performancewinst opleveren. De vraag is natuurlijk in welke mate dit zal zijn. Dat zal afhangen van de sterkte van de rest van je ontwerp.

Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Maar als je het meerdere malen doet is dat schadelijk of kan het geen kwaad?

Nou zelf dacht ik dat als je een connectie opent en als je deze niet meer gebruikt, dat het dan wat performance winst oplevert, maar blijkbaar is dat dus niet zo.

[ Voor 52% gewijzigd door RSD op 12-04-2011 14:22 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

RSD schreef op dinsdag 12 april 2011 @ 14:19:
Maar als je het meerdere malen doet is dat schadelijk of kan het geen kwaad?
Jawel. Je server zit continu opnieuw verbindingen weg te gooien en opnieuw aan te maken terwijl je die voor dezelfde request gewoon had kunnen hergebruiken. Dat wordt trouwens in de meeste beginnerstutorials ook gewoon uitgelegd.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Ok, ik heb meerdere tutorials gelezen en ook zelfs boeken, maar heb het dan misschien over het hoofd gezien, tijdens het lezen. Omdat de meeste boeken schrijvers er misschien vanuit gaan dat het vanzelfsprekend is, ben ik het niet tegengekomen. Of ik heb er over heen gelezen.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

RSD schreef op dinsdag 12 april 2011 @ 14:24:
Ok, ik heb meerdere tutorials gelezen en ook zelfs boeken, maar heb het dan misschien over het hoofd gezien, tijdens het lezen. Omdat de meeste boeken schrijvers er misschien vanuit gaan dat het vanzelfsprekend is, ben ik het niet tegengekomen. Of ik heb er over heen gelezen.
Simpele analogie: wat kost meer tijd? Je gaat naar de supermarkt voor 5 producten. Twee situaties:
  1. Je pakt 5 producten, legt de een voor een op de band, betaalt en gaat weg.
  2. Je pakt een product, gaat naar de kassa en betaalt, om vervolgens weer door de voordeur terug de winkel in te lopen voor het volgende product, enz.
Hoewel ik de eerste ben die toe zal geven dat het geen perfecte analogie is, is de tweede situatie toch min of meer wat je nu met je server uitvreet. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Het sluiten aan het einde van de pagina hoeft dus niet, omdat aan het einde van de pagina php dat automatisch doet toch?

Acties:
  • 0 Henk 'm!

  • ZpAz
  • Registratie: September 2005
  • Laatst online: 21-09 15:23
Klopt inderdaad.

Tweakers Time Machine Browser Extension | Chrome : Firefox


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Dat staat nota bene in de tweede alinea op de manualpage. Vergeet je niet zelf ook even wat moeite te doen voordat je vragen stelt die je zelf ook kan oplossen?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Qua load maakt het niet erg veel uit. Deze blijft hetzelfde ;-(

Acties:
  • 0 Henk 'm!

  • fleppuhstein
  • Registratie: Januari 2002
  • Laatst online: 07-09 13:37
RSD schreef op dinsdag 12 april 2011 @ 15:32:
Qua load maakt het niet erg veel uit. Deze blijft hetzelfde ;-(
En de load heb jij bepaald door ? Misschien even uitzoeken waaruit code optimalisatie bestaat, hoe je dat toepast, en meest belangrijk, kijkt hoe je dat optimaliseert

Staren naar wat de cpu meter / top aan geeft is geen afdoende methode om aan te nemen dat load hetzelfde blijft.

Acties:
  • 0 Henk 'm!

  • Precision
  • Registratie: November 2006
  • Laatst online: 12-08 21:08
RSD schreef op dinsdag 12 april 2011 @ 15:32:
Qua load maakt het niet erg veel uit. Deze blijft hetzelfde ;-(
Hoe meet je nu de load zoals hier boven reeds gevraagd? Je hebt meerdere services/processen hebben draaien. Waarbij bvb er net een proces gaat kijken of er een update beschikbaar is voor x of y, een ander bvb net een virusscan start, of je besturingssysteem werkt zijn zoekindex bij of verwerkt een binnengekomen mail of... of...

[ Voor 5% gewijzigd door Precision op 12-04-2011 23:21 ]

Crisis? Koop slim op Dagoffer - Op zoek naar een tof cadeau?


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Meten is weten. Maak gewoon een scriptje wat 5000x een representatieve query doet en elke keer opnieuw de verbinding opent en sluit, en eentje zonder (met natuurlijk dezelfde queries), en vergelijk de performance. Dat is enige manier om erachter te komen wat sneller is. Doe dit vervolgens ook in een setting waarbij je concurrency toepast, en kijk dan of dat wat uitmaakt (bijvoorbeeld m.b.v. ab of gewoon een simpel shell scriptje).

Op je gevoel afgaan is niet altijd raadzaam, je gevoel kan je namelijk ook vertellen dat het sneller moet kunnen terwijl je misschien wel aan de top van de prestaties van je server zit, of dat je database sneller moet kunnen reageren terwijl de bottleneck je systeemarchitectuur blijkt te zijn. Gevoel is wel belangrijk, daar niet van, maar bevestig (of ontkracht) je gevoel altijd eerst door te meten.

Load zou ik nooit naar kijken bij performance tuning. Absolute respons en relatieve performance zijn veel interessanter, want daar kun je echte statistiek opbouwen. Load is een vrij "zacht" gegeven.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Bij mysql tuner staat nu alles op OK alleen de lock / wait ratio is te hoog en dan staat erbij dat ik gebruik moet gaan maken van innodb. Dit heb ik ook geprobeerd, maar dat is ook niet de oplossing.
Dat zou ik met zo'n db toch zeker wel sterk overwegen.

1M queries/dag is niet zoveel trouwens. Zelfs als het allemaal in 10 uur/dag gegenereerd wordt, zit je op 27 queries per seconde. Op hedendaagse hardware moet je het honderdvoudige af kunnen handelen als het allemaal zo goed geïndexeerd is als je beweert. Ik geloof dan ook niet dat het maken van connecties hier het belangrijkste probleem is, want 27 verbindingen per seconde moet ook makkelijk lukken.

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 15:07
GlowMouse schreef op woensdag 13 april 2011 @ 21:53:
Dat zou ik met zo'n db toch zeker wel sterk overwegen.
Mmm, heb ook wel situaties gezien (als er veel reads plaatsvinden) waarbij MyISAM sneller is. Zeker als je nog een relatief oude MySQL versie gebruikt is InnoDB niet altijd sneller. Mind you, meten is weten natuurlijk, dus je zou het in elk geval eens moeten testen :)

[ Site ] [ twitch ] [ jijbuis ]

Pagina: 1