![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 195 Pomógł: 0 Dołączył: 13.04.2004 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Jedna, jedyna podstrona mojego serwisu, której przeznaczeniem jest generowanie prostego pliku html na potrzeby AJAXa, wykonuje się 45 sekund (tyle mija od wybrania jej do otworzenia jej). Skrypt nie zawiera nic specjalnego (od, kilka zapytań do bazy danych, układanie graficzne wyników). Wszystkie pozostałe strony serwisu (nawet znacznie bardziej skomplikowane) otwierają się w ciągu 3 - 5 sekundy. Zirytowany postanowiłem testować microtimem czas generowania strony, ale pod sam jej koniec (tuż nad die'm) czas wynosił 0.4 - 0.9 sekundy. Widać jednak spory spadek wydajności (0.2 sekundy) w linijce dotyczącej zapytania:
Baza danych chodzi na InnoDB. A, jeszcze jedno. Dość często się zdarza że w tej linijce następuje ujemny przyrost czasu (!) (tzn linijkę wyżej mamy czas microtime: 0.7, a po tej linijce mamy: 0.5) Mam nadzieję, że ktoś spotkał się już z czymś podobnym, bo to mi żyć nie daje... -------------------- Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 640 Pomógł: 44 Dołączył: 8.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
użyj xdebug to się dowiesz gdzie jest problem. 0.2 na zapytanie to nie problem przy 45 sekundach wykonywania skryptu.
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 195 Pomógł: 0 Dołączył: 13.04.2004 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Moja nieuwaga:
Start pliku: 0.51586200 1182753779 krok 1: 0.63114900 1182753779 - Zapytanie - krok 2: 0.85077600 1182753795 Finish: 0.87077600 1182753795 Czyli jednak to to zapytanie. Co w nim może być nie tak, że się wykonuje prawie 20 sekund? (nie wliczając czasu na pobieranie wyników) -------------------- Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 129 Pomógł: 2 Dołączył: 17.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
a ta baza jest na komputerze lokalnym? Jak tak to jakie jest obciazenie kompa (pamiec, procesor) oraz jaka tam masz konfiguracje
![]() -------------------- Słowa, słowa, słowa... - Hamlet || Funkcje, funkcje, funkcje... - Luke Star
-------------------------------------- Portal Literacki: ( |||------- ) 30% |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 10.12.2005 Skąd: Stalowa Wola / Wroclaw Ostrzeżenie: (0%) ![]() ![]() |
a ile GB ma ta baza?
![]() ![]() -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 195 Pomógł: 0 Dołączył: 13.04.2004 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Baza jest na serwerze home.pl
Cała baza ma 21 mb Układ tabel: Kod users:
+--+------+------+---------+ |id|owner | name | value | +--+------+------+---------+ |1 | 1 | name | Piotr | |2 | 1 | param| value | |3 | 2 | name | Maciek | |4 | 2 | param| value2 | |5 | 3 | name | Olga | |6 | 3 | param| value3 | +--+------+------+---------+ shoutbox: +--+----------+------+--------------+ |id| location |owner | text | +--+----------+------+--------------+ |1 | main | 1 | Witaj, Maciek| |2 | main | 2 | Witaj, Piotr | |3 | main | 1 | Gdzie Olga? | |4 | main | 3 | Nie ma mnie | |5 | main | 1 | Aha | |6 | other | 1 | Test test | +--+----------+------+--------------+ -------------------- Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 442 Pomógł: 0 Dołączył: 27.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli nie masz indeksów, to je załóż.
Następnie zmień zapytanie na normalnego JOIN'a ( o ile pamiętam przy czymś takim co ty pokazałeś nie są używane indeksy i wogóle jest to wolniejsze od zwykłego JOIN'a ). EDIT: Pomyliłem się. Ten post edytował UDAT 25.06.2007, 12:58:50 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 195 Pomógł: 0 Dołączył: 13.04.2004 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Jeśli nie masz indeksów, to je załóż. Pola id są typu PRIMARY(`id`) auto_increment... więc indeksy generalnie są ![]() Następnie zmień zapytanie na normalnego JOIN'a ( o ile pamiętam przy czymś takim co ty pokazałeś nie są używane indeksy i wogóle jest to wolniejsze od zwykłego JOIN'a ). Z tego co wiem nie ma znaczenia czy napiszę z widocznym JOINem, czy z ukrytym JOINem... a w każdym razie nie powinno robić to różnicy:EDIT: Pomyliłem się. phpmyadmin -> Pokaż rekordy 0 - 9 (10 wszystkich, Wykonanie zapytania trwało 16.8165 sekund(y)) Licho ciężkie... tym gorzej że ja kompletnie nie mam pomysłu dlaczego tak. Baza danych na InnoDB, tabela users ma 13 836 rekordów (3,5 mb), zaś tabela shoutbox ma 2 731 rekordów (1,5 mb) Edit - zrobiłem kopię bazy danych w MySQL 4.1 - problemu nie ma. Czyli sprawa występuje tylko w MySQL 5... Może ta wskazówka komuś pomoże na to wpaść? Niestety główną bazę muszę trzymać w mysqlu 5... Ten post edytował L_Devil 25.06.2007, 16:53:59 -------------------- Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 219 Pomógł: 5 Dołączył: 18.07.2006 Skąd: Piekary Śląskie Ostrzeżenie: (0%) ![]() ![]() |
sprawdź komendą EXPLAIN jaki jest plan wykonania zapytania
-------------------- CMS dla Twojej firmy
Wojciech Małota |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 195 Pomógł: 0 Dołączył: 13.04.2004 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Zdaniem phpmyadmina:
Kod id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE shout ALL NULL NULL NULL NULL 2791 Using where; Using temporary; Using filesort 1 SIMPLE u ALL NULL NULL NULL NULL 14345 Using where -------------------- Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 219 Pomógł: 5 Dołączył: 18.07.2006 Skąd: Piekary Śląskie Ostrzeżenie: (0%) ![]() ![]() |
No twoje zapytanie nie używa indeksów. To nie może być szybkie. I jeszcze sortowanie... I to wszystko z tabelą tymczasową. Ojojoj. Tak się zabija bazę.
Załóż indeks, na pole po którym łączysz tabele. Powinno pomóc. Ten post edytował cicik 25.06.2007, 21:05:14 -------------------- CMS dla Twojej firmy
Wojciech Małota |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 195 Pomógł: 0 Dołączył: 13.04.2004 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Sortuję według indeksów, ale nie mogę założyć indeksu na pole owner, bo nie jest unikalne... Chyba że się mylę.
Tak czy inaczej dochodzimy już do czegoś ![]() A tabeli tymczasowej jawnie nie używam - więc skąd się bierze? -------------------- Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 219 Pomógł: 5 Dołączył: 18.07.2006 Skąd: Piekary Śląskie Ostrzeżenie: (0%) ![]() ![]() |
A kto powiedział, że indeks można założyć tylko na polu unikalnym? Czytaj manuale.
A tabeli tymczasowej jawnie nie używam - więc skąd się bierze? Robi się sama (w tle). Powstaje ze złączenia dwóch tabel po to by móc zastosować warunki i sortowanie. Czytaj manuale. -------------------- CMS dla Twojej firmy
Wojciech Małota |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 195 Pomógł: 0 Dołączył: 13.04.2004 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
oh, god, takie to proste... indeks założony i zapytanie wykonuje się 0.0005 sekundy.
Wielkie dzięki Cicik, wygląda na to że muszę się jeszcze sporo dokształcić z mySQLa ![]() -------------------- Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 219 Pomógł: 5 Dołączył: 18.07.2006 Skąd: Piekary Śląskie Ostrzeżenie: (0%) ![]() ![]() |
wygląda na to że muszę się jeszcze sporo dokształcić z mySQLa ![]() No -------------------- CMS dla Twojej firmy
Wojciech Małota |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 10:58 |