/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Lukke basen
Fra : Henrik Pedersen


Dato : 19-08-02 23:53

Jeg så længere nede at en spurgte om man ikke bør lukke basen, når man har
hentet de data der skal bruges. Jonas skriver, at ifølge PHP burde det ikke
være nødvendigt.

Så er mit spørgsmål (håber ikke det er alt for meget off-topic) - har nogen
erfaring med om det belaster sitets loadtid, hvis der er flere forbindelser
til basen åben samtig. Jeg tænker på - surfer man rundt på en side, som hele
tiden henter sine ting fra en database, og disse ikke lukkes igen - kan det
så ikke være med til at belaste??

*/Henrik Pedersen



 
 
Jakob Møbjerg Nielse~ (20-08-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 20-08-02 01:02

Henrik Pedersen wrote:
> Jeg tænker på - surfer man rundt på en side, som hele tiden henter
> sine ting fra en database, og disse ikke lukkes igen - kan det så
> ikke være med til at belaste??


Nej, for garbage collectoren "går i gang" i samme øjeblik dit script er
blevet eksekveret. Se evt.
http://www.php.net/manual/en/language.types.resource.php. Der bliver
altså ryddet op efter dig (der er vist en enkelt undtagelse, og det er
hvis du laver billeder, og glemmer at bruge imagedestroy()).

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.



Larz (20-08-2002)
Kommentar
Fra : Larz


Dato : 20-08-02 01:04

Henrik Pedersen wrote:
> Jeg så længere nede at en spurgte om man ikke bør lukke basen, når man har
> hentet de data der skal bruges. Jonas skriver, at ifølge PHP burde det ikke
> være nødvendigt.

Prøv at kigge på

<http://dk.php.net/manual/en/features.persistent-connections.php>


--
-
Lars
http://coder.dk/sohofaq.php - Uofficiel WOL SOHO 77 FAQ
http://wshlman.moons.dk/ - Say goodbye to GameSpy
- A Free Half Life Manager!
To mail me remove your-pants.


Martin Mouritzen (20-08-2002)
Kommentar
Fra : Martin Mouritzen


Dato : 20-08-02 10:41

After I finished the 3 Pan Galactic Gargle Blasters, "Henrik Pedersen"
<hp@beone.dk> just offered me, he muttered some weird stuff, and I had
to correct this gibberish:

>Så er mit spørgsmål (håber ikke det er alt for meget off-topic) - har nogen
>erfaring med om det belaster sitets loadtid, hvis der er flere forbindelser
>til basen åben samtig. Jeg tænker på - surfer man rundt på en side, som hele
>tiden henter sine ting fra en database, og disse ikke lukkes igen - kan det
>så ikke være med til at belaste??

Det er lidt op til sundt fornuft. - Hvis du åbner en database
forbindelse øverst på siden, og derefter giver dig til at udregne nye
primtal, er det ikke optimalt. - Ellers er det ikke det store problem.
--
Husk at ønsk Jonas Koch Bentzen tillykke med de 25 år!

Henrik Pedersen (20-08-2002)
Kommentar
Fra : Henrik Pedersen


Dato : 20-08-02 22:58

"Henrik Pedersen" <hp@beone.dk> wrote in message
news:3d6176c5$0$27879$edfadb0f@dspool01.news.tele.dk...
> Jeg så længere nede at en spurgte om man ikke bør lukke basen, når man har
> hentet de data der skal bruges. Jonas skriver, at ifølge PHP burde det
ikke
> være nødvendigt.
>
> Så er mit spørgsmål (håber ikke det er alt for meget off-topic) - har
nogen
> erfaring med om det belaster sitets loadtid, hvis der er flere
forbindelser
> til basen åben samtig. Jeg tænker på - surfer man rundt på en side, som
hele
> tiden henter sine ting fra en database, og disse ikke lukkes igen - kan
det
> så ikke være med til at belaste??
>

Jeg takker for Jeres input - jeg har ligeledes oplevet problemer, hvis man
åbner en forbindelse øverst på siden, og senere henter flere oplysninger fra
f.eks. andre tabeller - muligvis mig der ikke har kodet PHP'en optimalt. Men
lukker jeg basen hver gang jeg har hentet de ting jeg er færdige med, og
åbner den igen, når der skal hentets noget nyt - så virker det.

Men om det samme gør sig gældende, når du skifter til en ny side - det ved
jeg altså ikke. Man kunne måske forestille sig, at den nærmest nulstiller
alle forbindelser til MySQL'en, når den skifter side... ??

*/Henrik Pedersen



Niels Andersen (21-08-2002)
Kommentar
Fra : Niels Andersen


Dato : 21-08-02 15:58

Henrik Pedersen wrote in <3d62bb7d$0$27644$edfadb0f@dspool01.news.tele.dk>:
> jeg har ligeledes oplevet problemer, hvis man
> åbner en forbindelse øverst på siden, og senere henter flere oplysninger
> fra f.eks. andre tabeller - muligvis mig der ikke har kodet PHP'en
> optimalt.

Det må det være. Måske bruger du to result-pointere, og blander dem sammen?

> Men om det samme gør sig gældende, når du skifter til en ny side - det ved
> jeg altså ikke. Man kunne måske forestille sig, at den nærmest nulstiller
> alle forbindelser til MySQL'en, når den skifter side... ??

I teorien bliver forbindelser til databaser lukket, når en side er
genereret. Praksis er normalt det samme.

Undtagelsen er, hvis du vælger at bruger "persistent connections". Så lever
selve forbindelsen videre, og kan bruges igen på næste side.
Eneste mærkbare forskel er dog performance-mæssigt, alt fungerer nemlig
stadig på samme måde.

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Johan Holst Nielsen (21-08-2002)
Kommentar
Fra : Johan Holst Nielsen


Dato : 21-08-02 19:16

>>jeg har ligeledes oplevet problemer, hvis man
>>åbner en forbindelse øverst på siden, og senere henter flere oplysninger
>>fra f.eks. andre tabeller - muligvis mig der ikke har kodet PHP'en
>>optimalt.
>
> Det må det være. Måske bruger du to result-pointere, og blander dem sammen?

Naah.. problemet kan opstå hvis man bruger den outdated
mysql_db_query... lad mig vise et eksempel...

<?php
$conn = mysql_connect("locahost", "user", "pass");
mysql_select_db("database1");

$query = "SELECT * FROM tabel_i_db1";
$result = mysql_query($query);
//noget der henter output

$query = "INSERT INTO tabel_i_db2 (id) VALUES ('".$_GET['id']."')";
mysql_db_query("database2", $query);

$query = "SELECT * FROM tabel_i_db1";
$result = mysql_query($query);
//henter mere data ud... ved ikke hvorfor men også kun et eksempel...
?>

I dette tilfælde vil nummer 3 query blive udført i DB2 i stedet for
DB1... (har ikke testet det i de nyeste PHP versioner... men gjorde den
tidligere under en test fra længere siden)...

Netop dette kan eventuelt forvirre brugere som ikke kender funktionerne
ordentlig.. :(

Well.. lets see? Kunne det være problemet?

mvh
Johan


Henrik Pedersen (22-08-2002)
Kommentar
Fra : Henrik Pedersen


Dato : 22-08-02 00:34

"Johan Holst Nielsen" <johan@weknowthewayout.com> wrote in message
news:3D63D8DE.8000409@weknowthewayout.com...
> Netop dette kan eventuelt forvirre brugere som ikke kender funktionerne
> ordentlig.. :(
>
> Well.. lets see? Kunne det være problemet?
>

Meget muligt - ikke noget jeg vil udelukke, men jeg vil lige kigge mine ting
igennem - bare for en sikkerheds skyld. Jeg har oplevet, at den begynder at
blande nogle outputs sammen - outputs som kommer fra forskellige tabeller -
og jeg er da ellers flnik til at opdatere PHP'en på serveren.....??

Så skriver Niels Andersen:
>Undtagelsen er, hvis du vælger at bruger "persistent connections". Så lever
>selve forbindelsen videre, og kan bruges igen på næste side.

Nu skal jeg ikke ligge skjul på, at jeg ikke er verdensmester til PHP - og
jeg har aldrig hørt om "persistent connections" (med mindre jeg har set
noget om det udtalt anderledes). Jeg kunne godt lige tænke mig at få en kort
forklaring på hvad det er, og evt. også på hvordan det virker. Jeg tror det
kan have min interesse, da jeg ofte har performance-problemer på sitet (jeg
siger ikke at det ikke kan skyldes noget andet

Med hensyn til performance, så hører jeg ofte - "husker du at optimere din
MySQL-database". Jo, tak - jeg ved godt hvad optimering er, men hvad menes
der lige præcis med dette. Nogle forslag til hvordan I
optimere/vedligeholder Jeres? Kunne man forestille sig, at der findes
programmer som kan hjælpe en med at gøre dette - hvis det vel og mærke er
noget der er nødvendigt?

*/Henrik Pedersen



Jens Kristian Søgaa~ (22-08-2002)
Kommentar
Fra : Jens Kristian Søgaa~


Dato : 22-08-02 01:39

"Henrik Pedersen" <hp@beone.dk> writes:

> igennem - bare for en sikkerheds skyld. Jeg har oplevet, at den begynder at
> blande nogle outputs sammen - outputs som kommer fra forskellige tabeller -
> og jeg er da ellers flnik til at opdatere PHP'en på serveren.....??

Det har absolut intet at gøre med at opdatere PHP på serveren. Ingen
af de PHP versioner jeg har arbejdet med har haft en sådan bug; og
hvis en version havde haft en sådan bug, ville den ganske givet blive
rettet _hurtigt_.

> Nu skal jeg ikke ligge skjul på, at jeg ikke er verdensmester til PHP - og
> jeg har aldrig hørt om "persistent connections" (med mindre jeg har set
> noget om det udtalt anderledes). Jeg kunne godt lige tænke mig at få en kort
> forklaring på hvad det er, og evt. også på hvordan det virker.

Ved mysql_connect lukkes forbindelsen til MySQL når siden er sendt til
browseren (med mindre du selvfølgelig lukker den manuelt).

Ved mysql_pconnect lukkes forbindelsen til MySQL ikke. PHP genbruger
så at sige forbindelsen, hvis andre sider connecter med de samme
parametre til mysql_pconnect (dvs. samme host, brugernavn og
password).

Fordelen er naturligvis, at du undgår overheads i forbindelse med at
oprette forbindelser til MySQL. Dette _kan_ være en performance fordel
(men er det ikke altid).

Ulempen er, at du får oprettet en masse forbindelser til MySQL, som du
ikke lukker.

Der er altså tale om et trade off mellem at åbne/lukke forbindelser
(gør PHP hurtigere), og at have mange forbindelser åbne til MySQL (kan
sløve MySQL ned).

> Jeg tror det
> kan have min interesse, da jeg ofte har performance-problemer på sitet (jeg
> siger ikke at det ikke kan skyldes noget andet

Med mindre du har _mange_ besøgende, er det nok ikke lige der, du vil
kunne høste de største benefits.

> Med hensyn til performance, så hører jeg ofte - "husker du at optimere din
> MySQL-database". Jo, tak - jeg ved godt hvad optimering er, men hvad menes
> der lige præcis med dette.

Der menes vel, at man sørger for at have sin database passende
normaliseret (slå det op på Google), at man søger for at tænke sig om
når man laver sine queries og at man husker at oprette fornuftige
indices på sin database.

Den optimering man kan få mange databaser til at lave på "selve filen"
(eller hvordan man nu skal udtrykke) er normalt ikke en "showstopper",
med mindre du har mange ændringer i din database, store mængder data
eller mange besøgende. I øvrigt sker den slags til en vis grad
automatisk med nogle DBMS.

For at optimere din side mht. databaser, skal du altså kigge på at:

1) Normalisere dine tabeller passende.

2) Sørge for aldrig at SELECT'e mere end du bruger.

3) Lave queries der udnytter infomationer i flere tabeller, istedet
for at lave en query til hver tabel, som så "flettes sammen" i dit
programmeringssprog.

4) At oprette de indices (index'er), som dine queries fordrer.

Det er ihvertfald nogle gode råd til at starte med.


--
Jens Kristian Søgaard, Mermaid Consulting ApS,
jens@mermaidconsulting.dk,
http://www.mermaidconsulting.com/

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408952
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste