[php] 1 record meer, parsetijd 80x zo groot

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met een forum en om een idee van snelheid te krijgen meet ik de parsetime met de volgende code:
bovenaan
function getmicrotime(){
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}

$time_start = getmicrotime();

for ($i=0; $i < 1000; $i++){
//do nothing, 1000 times
}
onderaan
$time = $time_end - $time_start;
$time = round($time, 3); echo $time;

als ik nu naar me showtopic ga kijken en ik heb een topic met 7 replies (kale tekst dus geen smilies bbcode, enz.) haal ik 0.005, maar als ik er nu 1/2 replies bij zet lopen die tijden op naar 0.400 80 x zo groot dus. Ik vraag me nu af waar dat aan kan liggen, verkeerde tabellen ofzo? of gewoon aan de server maar dat vind ik wel erg vaag dan.

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:52
Gebruik je indexen?

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ja, op me topic_id, forum_id en user_id

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:52
Heb je het execution plan van je query al eens bekeken?
Waarom doe je daar die 'do-nothing' lus ?
Weet je al waar de bottleneck zich juist bevindt?

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Die do nothing was het neit, die heb ik er al uit gehaald :)
en er hoort natuurlijk ook nog een $time_end = getmicrotime(); bij,
Ik heb nu van een query van een topic van 7 posts en een van 9 posts allebei de tij d gemeten en die waren bijna precies hetzelfde.

[ Voor 71% gewijzigd door Verwijderd op 15-02-2003 17:02 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Dit heb ik ook wel eens met parsetime icm microtime()...die verschilt op precies dezelfde pagina ook telkens :?
Dus de ene keer bijv. 0.08, dan 0.07 en dan opeens 0.52 ofzo.

Acties:
  • 0 Henk 'm!

  • Glock
  • Registratie: November 2001
  • Niet online
Verwijderd schreef op 15 februari 2003 @ 17:18:
Dit heb ik ook wel eens met parsetime icm microtime()...die verschilt op precies dezelfde pagina ook telkens :?
Dus de ene keer bijv. 0.08, dan 0.07 en dan opeens 0.52 ofzo.
Dat is de snelheid van php die steeds varieert :P

Topicstarter:
Is het een MySQL Database dat ervoor gebruikt word?

Zo ja, de desbetreffende query die je gebruikt, bevat deze een order by?
Zo ja, doe deze query dan eens met een explain en kijk of een van de volgende methodes worden gebruikt:
- Using filesort
- Using temporary

Is dit zo, weet ik wel zeker dat dit je boosdoener is. Dit kan je verhelpen door een andere database te nemen zoals PostgreSQL of wat aanpassingen aan je datamodel maken zoals ik hier beschreven heb.

edit:
Dit was ff aannemende dat het probleem zich nog wel een keer voor zou kunnen doen aangezien dit hele verhaal me te bekend voorkomt ;)

[ Voor 8% gewijzigd door Glock op 15-02-2003 22:27 ]


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Hier kunnen we natuurlijk vrij weinig mee, met zo weinig informatie.

Je moet wat uitgebreider testen, elk apart onderdeel van je code moet je even in tijd opmeten, en dan kan je precies zien waar de bottle-neck zit..

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mijn query is
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
SELECT
      m.username,
        p.tekst,
     m.email,
      m.url,
           m.user_status,
        m.sig,
         m.user_id,
          m.avatar,
           p.post_id,
            p.tekst,
         f.naam,
          m.user_rank,
           m.user_title,
            f.mod_id,
             t.*
FROM   posts p,
        members m,
     topics t,
      forums f
WHERE   p.topic_id = '$topic'
AND     m.user_id = p.poster_id
AND     t.topic_id = '$topic'
AND     f.forum_id = t.forum_id
LIMIT   $start, $max

als ik voor topic_id 1 invul en zonlimit EXPLAIN doe levert mij dat het volgende op

table type possible_keys key key_len ref rows Extra
t const PRIMARY,topic_id,topic_id_2 PRIMARY 4 const 1
f const PRIMARY,forum_id PRIMARY 4 const 1
p ref topic_id topic_id 4 const 34 where used
m eq_ref PRIMARY,id PRIMARY 4 p.poster_id 1 where used

Geen temporary of filesort dus.
Maar wat ik ook vaag vind is dat hier op me eigen pc (350 mhz) de index langzamer
is dan listtopics en showtopic dan op een externe server (10x zo langzaam) en
op die server zijn listtopics /showtopic langzamer dan hier.

Kan dus zijn dat het niet aan mysql ligt. Ik doe voor showtopic eerst de query,
dan zet ik alles in een array en geef het later pas weer. Ik heb het getest
en dat was sneller dan wanneer ik alles direct weer geef, zou het daar aan kunnen
liggen?
Pagina: 1