Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MYSQL]Mega problem z zapytaniami
_Martin_
post
Post #1





Grupa: Zarejestrowani
Postów: 352
Pomógł: 9
Dołączył: 16.09.2005
Skąd: Rybnik

Ostrzeżenie: (0%)
-----


Hejka

Potrzebuje pilnej pomocy ze względu ze moja strona generuje za duzo zapytań do mysl, proszę powiedzieć mi jak moge je "zbić"
Tzn znaleść te które przeciążają mysql i go wyłączają i strony łądują sie nawet 10-15 sekund a czasami wybija
Jak to moge naprawić prosze o pilna pomoc i rady?
Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
blooregard
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Mam taka klasę, taki niby-stoper. Uzywam go w ten sposób, że ustawiam sobie split-time'y np. przed i po każdym zapytaniu MySQL. Na końcu, w formie tabelki, wyświetla mi czasy wykonania poszczególnych fragmentów kodu. Bardzo łatwo wychwycić w ten sposób "wąskie gardła". Ponieważ kod nie jest zbyt rozbudowany, wklejam go tutaj.
Chcesz, to użyj, nie, to nie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Sposób użycia (przykład):
  1. <?php
  2. $bm = new Benchmark();
  3. ...
  4. $bm->split('początek wykonania zapytania');
  5. //tu klopotliwe zapytanie
  6. ...
  7. $bm->split('koniec wykonania zapytania');
  8.  
  9. //reszta skryptu
  10. ...
  11.  
  12. //wyswietlenie tabelki z czasami
  13. $bm->display();
  14. ?>


Kod klasy:
  1. <?php
  2. /**
  3.  * klasa Benchmark - stoper
  4.  *
  5.  *
  6.  * @author blooregard <bloorq@gmail.com>
  7.   */
  8.  
  9. /**
  10.  * klasa-stoper do pomiaru czasu wykonywania skryptow
  11.  *
  12.  */
  13. class Benchmark {
  14.  
  15.  
  16.    /**
  17.      * punkty pomiaru
  18.      *
  19.      * @var unknown_type
  20.      */
  21.    private $split_times = array();
  22.  
  23.    /**
  24.      * miedzyczasy - opisy
  25.      *
  26.      * @var unknown_type
  27.      */
  28.    private $split_desc = array();
  29.  
  30.    /**
  31.      * konstruktor i zainicjowanie testu
  32.      *
  33.      * @return bm
  34.      */
  35.    public function __construct() {
  36.        $this->split_times[] = $this->getmicrotime();
  37.        $this->split_desc[] = "start";
  38.    }//bm()
  39.  
  40.  
  41.    private function getmicrotime(){
  42.        list($usec, $sec) = explode(" ",microtime());
  43.        return ((float)$usec + (float)$sec);
  44.    }//getmicrotime
  45.  
  46.    /**
  47.      * miedzyczas - dodanie czasu wykonania i opisu
  48.      *
  49.      * @param unknown_type $opis
  50.      */
  51.    public function split($opis) {
  52.        $this->split_times[] = $this->getmicrotime();
  53.        $this->split_desc[] = $opis;
  54.        return;
  55.    }//split
  56.  
  57.    /**
  58.      * zakonczenie pomiaru i wyswietlenie wynikow
  59.      *
  60.      */
  61.    public function t_stop() {
  62.        $this->split_times[] = $this->getmicrotime();
  63.        $this->split_desc[] = "";
  64.    }
  65.  
  66.    /**
  67.      * wyswietla tabelke z wynikami
  68.      *
  69.      */
  70.    public function display() {
  71.  
  72.        echo '<table style="border-colapse:collapse; font-family:verdana, helvetica, arial; font-size:10px; color:#555;" cellspacing="0" cellpadding="3">
  73.        <tr style="background-color:#eaeaea;">
  74.        <th style="width:300px; border:1px solid #d0d0d0;">punkt pomiaru</th>
  75.        <th style="width:200px; border:1px solid #d0d0d0;">bezwzględny czas wykonania</th>
  76.        <th style="width:200px; border:1px solid #d0d0d0;">czas wykonania bloku kodu</th></tr>
  77.  
  78.        <tr><td style="width:300px; border:1px solid #f0f0f0;">'.$this->split_desc[0].'</td>
  79.        <td style="width:200px; border:1px solid #f0f0f0;">'.$this->split_times[0].'</td>
  80.        <td style="width:200px; border:1px solid #f0f0f0;">0.0000 sek.</td></tr>';
  81.  
  82.        for($i=1; $i<(count($this->split_times)-1); $i++) {
  83.            echo '<tr><td style="width:300px; border:1px solid #f0f0f0;">'.$this->split_desc[$i].'</td>
  84.            <td style="width:200px; border:1px solid #f0f0f0;">'.$this->split_times[$i].'</td>
  85.            <td style="width:200px; border:1px solid #f0f0f0;">'.sprintf("%01.4f sek.",$this->calculate_time($i)).'</td></tr>';
  86.        }//for
  87.  
  88.  
  89.  
  90.        echo'<tr><td  style="border:1px solid #f0f0f0;">stop (czas wykonania całego skryptu)</td>
  91.        <td style="border:1px solid #f0f0f0;">'.$this->split_times[count($this->split_times)-1].'</td>
  92.        <td style="border:1px solid #f0f0f0;">'.sprintf("%01.4f sek.",(($this->split_times[count($this->split_times)-1])-($this->split_times[0]))).'</td></tr>
  93.        </table>';
  94.        return;
  95.  
  96.    }//stop
  97.  
  98.    /**
  99.      * oblicza czas pomiedzy kolejnymi pomiarami
  100.      *
  101.      */
  102.    private function calculate_time($i) {
  103.        return (($this->split_times[$i])-($this->split_times[$i-1]));
  104.    }
  105. }//class Benchmark
  106. ?>
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.10.2025 - 16:24