Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL]Mega problem z zapytaniami
Forum PHP.pl > Forum > Przedszkole
_Martin_
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
wookieb
1) skad my mamy wiedziec jakiego skryptu uzywasz
2) skad mamy wiedziec jakie zapytania sa wysylane do bazy
3) skad my mamy wiedziec CO "zbic"
4) co to znaczy "wybija"?

Jak odpowiesz na pytania to pogadamy smile.gif
Spawnm
zoptymalizuj kod, pokaż go nam :)
Crozin
MySQL sam w sobie może logować wolne zapytania. Możesz też zrobić sobie coś w stylu:
  1. <?php
  2. function abc_do_query($query){
  3.  static $log = array();
  4.  
  5.  $start = microtime(true);
  6.  $r = mysql_query($query);
  7.  log[] = array(microtime() - $start, $query);
  8.  
  9.  return $r;
  10. }
  11. ?>
Dzięki czemu na końcu skryptu będziesz miał dostęp do wszystkich wykonanych zapytań oraz czasu ich realizowania.
_Martin_
Cięzko to określić mam plik funkcja.php gdzie mam stos funkcji co wysyłają zapytania do mysql. Po wejściu w każdą strone odwołuje się do tego pliku gdzie zapisane są funkcje... cieko mi pwoiedzieć w tym mam jeszcze w plikach (podstronac ) dodane zapytania!
erix
Nie masz znajdź i zamień? tongue.gif
_Martin_
Znajdź i zmien tzn ?

Mój przykładowy eTime smile.gif

Czyli milisekundach szybkość ładowania smile.gif
TLG: 0.057761
Ale strona się wgrywa bardzo długo!

P.S A TO 3 losowe
TLG: 0.013205
TLG: 0.158061
TLG: 0.071055

A Funkcja którą to sprawdzam to:

  1. <? echo 'TLG: '.round(microtime()-$start, 6); ?>
blooregard
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 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. ?>
_Martin_
thx
blooregard

Czyli mam go wstawić strony bo troche mnie to zamdliło smile.gif nie bawiłem się na klasach itp jeszcze smile.gif
blooregard
Tak, możesz wkleić ten kod bezpośrednio na swoją stronę, bądź też zapisać go w osobnym pliku i zainkludować na początku skryptu
_Martin_
a Tak działa smile.gif pokazac wyniki? sprawdzisz czy ok?
blooregard
To Tobie te wyniki mają wskazać, gdzie Ci muli smile.gif
Ja wiem, że ten skrypt działa, bo go używam smile.gif
_Martin_
Cytat
start 1243973245.28 0.0000 sek.
Poczatek wykonania zapytania 1243973245.28 0.0001 sek.
Po zaladowaniu header index.php 1243973245.28 0.0000 sek.
Przed zaladowaniem pliku funkcji 1243973245.37 0.0876 sek.
Po zaladowaniem pliku funkcji 1243973245.41 0.0378 sek.
STOP (Czas wykonania caLego skryptu) 1243973245.41 0.1257 sek.


Ale ale jak sie to ma do wyników jaki jest najlepszy i standardowo szybki czas poniższej ilu sek?
blooregard
Cytat
Ale ale jak sie to ma do wyników jaki jest najlepszy i standardowo szybki czas poniższej ilu sek?

Nie ma czegoś takiego, jak standardowy czas. Wszystko zależy od bazy, zapytania, ilości danych i setki innych czynników.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.