|
| 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).' millisekunder.'?>
| |
|
|