/ 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
tid på query i mySQL
Fra : Dennis Eskildsen


Dato : 24-10-01 11:42

Hej gruppe

Er der nogen der ved hvordan man for udskrevet på sin side, hvor lang tid et
query til en mySQL database tog.
Hvis man bruger sin mySQL klient skriver den det jo selv, efter hvert query.

på forhån tak
Dennis



 
 
Jonas Häggqvist (24-10-2001)
Kommentar
Fra : Jonas Häggqvist


Dato : 24-10-01 12:57

On Wed, 24 Oct 2001 12:41:51 +0200, "Dennis Eskildsen" <eske@city.dk>
wrote:

>Hej gruppe

Hejsa.

>Er der nogen der ved hvordan man for udskrevet på sin side, hvor lang tid et
>query til en mySQL database tog.
>Hvis man bruger sin mySQL klient skriver den det jo selv, efter hvert query.

Jeg er ret overbevist om, at det er noget klienten selv "gætter" sig
frem til. Altså den tager tid på hvor lang tid der er gået fra queryen
sendes, til resultatet returneres. Så du må nok selv igang med at måle
tiden der går fra før mysql_query() kaldes, til efter.

Med mindre nogen kender en smartere måde?

--
Jonas Häggqvist

Dennis Eskildsen (24-10-2001)
Kommentar
Fra : Dennis Eskildsen


Dato : 24-10-01 14:52



>
> >Er der nogen der ved hvordan man for udskrevet på sin side, hvor lang tid
et
> >query til en mySQL database tog.
> >Hvis man bruger sin mySQL klient skriver den det jo selv, efter hvert
query.
>
> Jeg er ret overbevist om, at det er noget klienten selv "gætter" sig
> frem til. Altså den tager tid på hvor lang tid der er gået fra queryen
> sendes, til resultatet returneres. Så du må nok selv igang med at måle
> tiden der går fra før mysql_query() kaldes, til efter.
>
Jeg var bange for det, men tak for hjælpen.
Jeg må vel igang med at regne

Dennis





Niels Andersen (24-10-2001)
Kommentar
Fra : Niels Andersen


Dato : 24-10-01 15:01

"Dennis Eskildsen" <eske@city.dk> wrote in message
news:9r6h0o$hgv$1@sunsite.dk...
> > Så du må nok selv igang med at måle
> > tiden der går fra før mysql_query() kaldes, til efter.
> Jeg var bange for det, men tak for hjælpen.
> Jeg må vel igang med at regne

Det er nu ikke noget at være bange for.
Se her, hvor simpelt det er: http://dk.php.net/microtime

--
Mvh.

Niels Andersen



Dennis Eskildsen (24-10-2001)
Kommentar
Fra : Dennis Eskildsen


Dato : 24-10-01 16:31


> > > Så du må nok selv igang med at måle
> > > tiden der går fra før mysql_query() kaldes, til efter.
> > Jeg var bange for det, men tak for hjælpen.
> > Jeg må vel igang med at regne
>
> Det er nu ikke noget at være bange for.
> Se her, hvor simpelt det er: http://dk.php.net/microtime

Det var sgu' lækkert tak for det

Dennis



Peter Brodersen (24-10-2001)
Kommentar
Fra : Peter Brodersen


Dato : 24-10-01 23:53

On Wed, 24 Oct 2001 13:56:47 +0200, Jonas Häggqvist
<rasher_13@hotmail.com> wrote:

>Jeg er ret overbevist om, at det er noget klienten selv "gætter" sig
>frem til. Altså den tager tid på hvor lang tid der er gået fra queryen
>sendes, til resultatet returneres.

Den typiske mysql-klient (altså ikke til PHP) tæller rigtigtnok selv
tiden fra queryen blev afsendt til svaret returneres. Søg i mysql.cc
efter bl.a. time_buff, start_timer og end_timer.

>Så du må nok selv igang med at måle
>tiden der går fra før mysql_query() kaldes, til efter.

Problemet er her, at mysql_query() fører til en mysql_store_result, og
ikke bare en mysql_use_result (jf. php_mysql.c), hvilket betyder, at
man også skal vente på at dataen kommer tilbage.

Med andre ord vil et difference-check af tidstagning umiddelbart før
og efter en mysql_query både inkludere tiden for query-behandlingen og
for dataoverførslen.

Henter man således teoretisk set data fra en hurtig server via et
sløvt link, vil størstedelen af den målte tid omhandle tiden, det tog
at smide data fra serveren og tilbage igen.

>Med mindre nogen kender en smartere måde?

Er formålet at man skal få nogle tider, der skulle indikere hvor
"tung", ens queries er, kan tids-diff-tingen nok stadigvæk bruges,
såfremt man bruger mysql_unbuffered_query() fremfor mysql_query().
Førstnævnte benytter sig blot af mysql_use_result undervejs.

Ligesom at den normale mysql-klient selv har kode til at tage tid,
ville det være rart, hvis PHP's mysql-kode også havde. Jeg overvejede
at flytte noget af koden fra mysql.cc ind i php_mysql.c og så lave en
PHP-funktion, der kunne returnere denne tid, men da jeg ikke er vild
med at kompilere en del (og i øvrigt ikke er nogen haj til C), så
opgav jeg umiddelbart ideen.

Hvis jeg får mere styr på det, kunne jeg være fristet til at checke
muligheden for at få det ind i den rigtige PHP-kode.

--
- Peter Brodersen

Anders Johannsen (25-10-2001)
Kommentar
Fra : Anders Johannsen


Dato : 25-10-01 23:48

On Thu, 25 Oct 2001 00:52:41 +0200, Peter Brodersen wrote:

> Ligesom at den normale mysql-klient selv har kode til at tage tid, ville
> det være rart, hvis PHP's mysql-kode også havde. Jeg overvejede at
> flytte noget af koden fra mysql.cc ind i php_mysql.c og så lave en
> PHP-funktion, der kunne returnere denne tid, men da jeg ikke er vild med
> at kompilere en del (og i øvrigt ikke er nogen haj til C), så opgav jeg
> umiddelbart ideen.

Det lyder interessant. Hvordan skulle syntaksen i givet fald være?

   $con = mysql_connect("user", "passwd", "host");
   $rs = mysql_query("SELECT COUNT(field) FROM largeTable");
   print mysql_time_elapsed($rs);

Altså: Skal tiden binde sig til den enkelte query?

> Hvis jeg får mere styr på det, kunne jeg være fristet til at checke
> muligheden for at få det ind i den rigtige PHP-kode.

Umiddelbart er chancerne nok små, for selvom PHP er ret bloated i
forvejen, er det min vurdering, at man nødigt vil indføre kode der har
negativ indflydelse på performance[1] i et så centralt modul som mysql.

Ikke desto mindre kunne det være morsomt at lave en patch.

/A
--
"I don't, however, have any particular axe to grind regarding languages,
heck, I even write my web pages in PHP (one of the most bletcherous excuses
for a programming language to come down the pike -- but excellent for quicky
one-off weblets)." -- Eric Lee Green in comp.lang.ruby

Peter Brodersen (26-10-2001)
Kommentar
Fra : Peter Brodersen


Dato : 26-10-01 12:22

On Fri, 26 Oct 2001 00:48:26 +0200, "Anders Johannsen"
<anders@ignition.dk> wrote:

>Det lyder interessant. Hvordan skulle syntaksen i givet fald være?
>
>   $con = mysql_connect("user", "passwd", "host");
>   $rs = mysql_query("SELECT COUNT(field) FROM largeTable");
>   print mysql_time_elapsed($rs);
>
>Altså: Skal tiden binde sig til den enkelte query?

Tiden ville klart skulle binde sig til den enkelte query, ja. Enten
noget i stil med ovenstående, eller også som en by-reference, fx:

$rs = mysql_query("SELECT COUNT(field) FROM largeTable",&$time);

>Umiddelbart er chancerne nok små, for selvom PHP er ret bloated i
>forvejen, er det min vurdering, at man nødigt vil indføre kode der har
>negativ indflydelse på performance[1] i et så centralt modul som mysql.

Er [1] også at finde noget sted? :)

Jeg tror ikke at performance egentligt ville falde af den grund. Det
eneste, der foretages, er jo blot at tælle, mens klienten alligevel
blot står og venter på data.

>Ikke desto mindre kunne det være morsomt at lave en patch.

Det ville også være morsomt at kunne finde ud af at programmere den
slags Som nævnt er jeg ikke nogen haj til C overhovedet, men jeg
må indrømme, at koden forekommer mig ganske simpel, så jeg kunne da
være fristet. Om ikke andet tror jeg, jeg burde starte med bare at
prøve at lave en tilfældig, hjemmelavet PHP-funktion og compile med
ind i første omgang, bare for at få lidt erfaring med det.

--
- Peter Brodersen

Anders Johannsen (26-10-2001)
Kommentar
Fra : Anders Johannsen


Dato : 26-10-01 13:32

> Tiden ville klart skulle binde sig til den enkelte query, ja. Enten
> noget i stil med ovenstående, eller også som en by-reference, fx:
>
> $rs = mysql_query("SELECT COUNT(field) FROM largeTable",&$time);

Nu har mysql i forvejen en option på den plads, men okay.

> Jeg tror ikke at performance egentligt ville falde af den grund. Det
> eneste, der foretages, er jo blot at tælle, mens klienten alligevel
> blot står og venter på data.

Det er nu heller ikke de to systemkald for at modtage tiden før og efter
jeg er bekymret for -- problemet er, at der ikke er nogen struktur der
følger den enkelte query. Altså skal man til at oprette en ny mapping
(i form af en hash-tabel) mellem det ressourceid, der identificerer en query
og den tid det har taget.

> Det ville også være morsomt at kunne finde ud af at programmere den
> slags

Er det så galt? Nu er der heller ingen der anklager PHPs udvidelses-API
for at være specielt godt designet eller overskueligt.

> Som nævnt er jeg ikke nogen haj til C overhovedet, men jeg
> må indrømme, at koden forekommer mig ganske simpel, så jeg kunne da
> være fristet. Om ikke andet tror jeg, jeg burde starte med bare at
> prøve at lave en tilfældig, hjemmelavet PHP-funktion og compile med
> ind i første omgang, bare for at få lidt erfaring med det.

God fornøjelse. Post koden her.

/A



Peter Brodersen (29-10-2001)
Kommentar
Fra : Peter Brodersen


Dato : 29-10-01 19:07

On Fri, 26 Oct 2001 14:31:59 +0200, "Anders Johannsen"
<anders@ignition.dk> wrote:

>> Det ville også være morsomt at kunne finde ud af at programmere den
>> slags
>Er det så galt? Nu er der heller ingen der anklager PHPs udvidelses-API
>for at være specielt godt designet eller overskueligt.

Jeg aner ikke om det er slemt. Det er det nok ikke, men som nævnt er
jeg ikke nogen haj til C overhovedet. Jeg plejer ikke at have
problemer med at rette i eksisterende C-kode, men jeg har ikke den
store erfaring i at banke noget nyt sammen. Anyhoo, det vil tiden
vise.

--
- Peter Brodersen

Klaus Rene Hansen (25-10-2001)
Kommentar
Fra : Klaus Rene Hansen


Dato : 25-10-01 22:27


"Dennis Eskildsen" <eske@city.dk> wrote in message
news:9r693l$q1r$1@sunsite.dk...
> Hej gruppe
>
> Er der nogen der ved hvordan man for udskrevet på sin side, hvor lang tid
et
> query til en mySQL database tog.
> Hvis man bruger sin mySQL klient skriver den det jo selv, efter hvert
query.
>
<?
function GetMicrotime() {
$t = microtime();
return ( (double) strstr($t, " ") + (double) substr($t, 0, strpos($t, "
")));
}

$connection = mysql_connect("localhost","USER","PASS");
mysql_select_db("DB", $connection);
$qs = "SELECT * FROM ord ORDER BY RAND() LIMIT 10";
$start = GetMicrotime();
$mysql_result = mysql_query($qs,$connection)
or die(mysql_error());

while($row = mysql_fetch_row($mysql_result))
{
$ord = $row[0];
echo "$ord<BR>";
}
$slut = GetMicrotime();
?>
Eksekveringstid: <?=round(($slut-$start) * 1000,
6).'&nbsp;millisekunder.'?>







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

Månedens bedste
Årets bedste
Sidste års bedste