Avatar billede zac Nybegynder
23. august 2006 - 14:48 Der er 6 kommentarer og
1 løsning

Endnu engang: Problemer med lukning af en mysql forbindelse?

Et spm. om åbning og lukning/ administration og vedligeholdelse af mysql forbindelser.

Svært at finde noget om, incl. hvad er bedst. Har søgt her på eksperten, set: http://www.eksperten.dk/spm/245422 , http://www.eksperten.dk/spm/557642 - og http://www.eksperten.dk/spm/201788 , der henviser til http://www.php.net/manual/en/function.mysql-close.php ifølge hvilken mysql_close(); ikke skulle være nødvendig, fordi forbindelsen automatisk lukker, når scriptet slutter.

1.Jeg har aldrig før brugt  mysql_close(); - blot åbnet en mysql_connect(); og lavet det antal querys, der var nødvendigt. Synes ikke, der har været problemer før.

2. Problem nu: Somme tider død side med meddelelse om, at der bør forsøges ”mysqladmin flush-hosts;” – og upload af filen med denne kommando indsat løser straks problemet.

3. Typer det på, at jeg har skabt problemet? Hvis så, kan det være ved for mange querys? Men 12-14 stk. på en side kan da ikke være for mange, vel? Eller er det et problem hos  server/ udbyder?

Savner i det hele taget inf. om disse sammenhænge:

4. Fx forside med en connect og et par querys, leder til ny side med ny connect og en del querys – rigtigt så, at forsidens connect lukkes ved overgangen til side 2? Og det samme igen ved skift til 3. side? Sådan forstår jeg det med, at close ikke er nødvendigt. Men betyder det, at trækket på serveren begynder forfra ved hvert sideskift?

5. Nogen forskel på at åbne, spørge og lukke i 2-3 omgange på en side, i forhold til kun at åbne, spørge flere gange og lukke kun een gang (især hvis der er mange querys under en connection=?

6. Noget jeg overser i disse sammenhænge?
Avatar billede Slettet bruger
23. august 2006 - 15:21 #1
Avatar billede zac Nybegynder
23. august 2006 - 19:23 #2
Ja, nu har jeg :) - så mit problem havde nok slet ikke noget med close at gøre.

Det passer meget godt med, at meddelelsen/ rådet om mysqladmin flush-hosts kom efter, at jeg flere gange havde ændret i filen, og ikke kunne få det til at virke.
Så det er næppe indbrudsforsøg, som det ellers også kunne være tegn på.

Det er så formentlig (hele) forklaringen, og så er det ikke så galt endda.
Du fortjener point!

Jeg kan vel ikke selv se host_name.err filen, når jeg har webhotel ude i byen?
Avatar billede Slettet bruger
23. august 2006 - 19:59 #3
Nej, den kan du sandsynligvis ikke se. Men det kan da ikke skade at spørge supporten, om den fil er tilgængelig for dig. Du kan jo være heldig.

Du spurgte forresten også om der kunne være problemer med at bruge samme forbindelse til flere queries. Det har jeg aldrig oplevet, og jeg kunne ikke forestille mig, at det skulle være tilfældet. Til gengæld kan der være en ide i at fortælle PHP når du er færdig med at bruge resultaterne fra en forespørgsel - især, hvis nogle af dine forespørgsler giver store svar. Se http://www.php.net/manual/en/function.mysql-free-result.php
Avatar billede zac Nybegynder
23. august 2006 - 20:29 #4
Kan ane nogle sammenhænge, men ikke helt forstå det...
- Som jeg forstår det ...free-result..., hvis man bruger det (individuelle) handle/ den bestemte query, man vil have til at gå ud af memory.
- Men hvad sker der, hvis man ikke bruger free-result - resultaterne ud af memory, når man åbner ny connection? Så det "kun" gælder om at rense memory indenfor en given connection? Eller hvornår automatisk "free result" i alle tilfælde?

Jeg burde prøve en dag og se, hvad der sker i forskellige situationer, vha. memory_get_usage().
Avatar billede Slettet bruger
23. august 2006 - 20:44 #5
PHP bliver ved med at huske resultatet fra en query indtil scriptet afslutter eller man (med mysql_free_result) fortæller den, at den roligt kan glemme det nu.

Dermed vil hukommelsesforbruget for scriptet blive mindre, hvis man glemmer resultaterne når man er færdig med at bruge dem. For queries, der kun trækker nogle få rækker med tekst og tal ud fra databasen, betyder det ikke noget særligt. Hvis man har queries, der giver store resultater (f.eks felter af typen TEXT eller BLOB som er 64K) eller mange rækker, kan det måske godt mærkes.

Om det har reel betydning afhænger også af antallet af brugere.

Og bemærk, at det har ikke noget med connections at gøre.
Avatar billede zac Nybegynder
23. august 2006 - 22:58 #6
--> ikke noget med connections at gøre...
Men normalt vil man fra en side åbne connection, foretage querys, og så (ofte) linke til ny side.

Og på denne nye side laver man ny connection - og så bliver resultaterne af querys fra side 1 vel smidt ud når denne sides conncection brydes ved afslutning af skriptet/ siden? Rigtigt forstået? Altså: Man er automatisk færdig med at bruge resultaterne, når man springer til ny side, hvor der foretages ny connection!?
Avatar billede Slettet bruger
23. august 2006 - 23:51 #7
Prøv at tænke et øjeblik over hvornår den nye side reelt bliver kaldt. Der er to muligheder:

1) Et normalt link. Det ser brugeren først, når dit script er færdigt. Og så skal han lige finde det og klikke på det, før dit næste script kommer til at køre. Så der vil typisk gå mindst 5-10 sekunder fra dit første script er færdigt til det næste script kører.

I dette tilfælde kan det dog ske, at din side er lang tid om at blive lavet, så den bliver sendt til brugeren i etaper og han dermed når at klikke på et link inden dit script er færdigt. Det er dog kun ved ganske komplicerede sider, at den slags er sandsynligt.

2) En redirect. Sådan et fungerer ved at dit script sætter en header, som leveres til brugerens browser. Normalt vil man kode således at scriptet ikke laver mere efter den redirect. Scriptet vil altså normalt nå at afslutte inden browserens anmodning om den nye side ankommer til serveren. Her vil der typisk gå et halvt sekund eller mere fra det første script er færdigt til det andet begynder. Det lyder måske af lidt, men det er faktisk ganske lang tid i computertid. Som eksempel så jeg lige på http://exp.dk/ hvor der nederst til højre står, hvor lang tid, serveren var om at lave siden og det var lige under et halvt sekund. Og her er der altså tale om den komplette generering af en side med en hel del databasekald.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester