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 (1 - 13)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Spawnm
post
Post #3





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




zoptymalizuj kod, pokaż go nam :)
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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.
Go to the top of the page
+Quote Post
_Martin_
post
Post #5





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

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


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!
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Nie masz znajdź i zamień? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
_Martin_
post
Post #7





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

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


Znajdź i zmien tzn ?

Mój przykładowy eTime (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Czyli milisekundach szybkość ładowania (IMG:http://forum.php.pl/style_emoticons/default/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); ?>


Ten post edytował _Martin_ 2.06.2009, 20:26:08
Go to the top of the page
+Quote Post
blooregard
post
Post #8


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
_Martin_
post
Post #9





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

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


thx
blooregard

Czyli mam go wstawić strony bo troche mnie to zamdliło (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) nie bawiłem się na klasach itp jeszcze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
blooregard
post
Post #10


Newsman


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




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
Go to the top of the page
+Quote Post
_Martin_
post
Post #11





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

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


a Tak działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) pokazac wyniki? sprawdzisz czy ok?
Go to the top of the page
+Quote Post
blooregard
post
Post #12


Newsman


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




To Tobie te wyniki mają wskazać, gdzie Ci muli (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Ja wiem, że ten skrypt działa, bo go używam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
_Martin_
post
Post #13





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

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


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?

Ten post edytował _Martin_ 2.06.2009, 21:09:04
Go to the top of the page
+Quote Post
blooregard
post
Post #14


Newsman


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




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.
Go to the top of the page
+Quote Post

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: 4.10.2025 - 17:10