Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Obciążenie mysql
Forum PHP.pl > Forum > Serwery WWW
adam882
Witam

Otrzymałem informację, że moje konto powoduje za długie zapytania do bazy danych mysql. Mam jednak pewne wątpliwości, gdyż moim zdaniem wcale nie powinny powodować obciążenia. Przykładowo:

Kod
UPDATE kanaly SET odslon=odslon+N WHERE id=N
  Zapytanie wykonane 27 razy na bazie d4548dn_strona, wartosci średnie: query time: 11.48s, lock time 0.00s, rows sent 0.0, rows examined 0.0


Kod
SELECT id, nazwa, opis, odslon FROM kanaly WHERE kat=N ORDER BY odslon DESC
  Zapytanie wykonane 3 razy na bazie d4548dn_strona, wartosci średnie: query time: 7.33s, lock time 6.33s, rows sent 24.7, rows examined 102.7


Kod
SELECT * FROM kanaly WHERE id=N
Zapytanie wykonane 2 razy na bazie d4548dn_strona, wartosci średnie: query time: 8.00s, lock time 0.00s, rows sent 1.0, rows examined 1.0


Dodam, że strona posiadała z 800uniq/dzień i ok. 100 rekordów w tabeli "kanaly". Podstrony z danymi zapytaniami wczytują się u mnie błyskawicznie. Czy waszym zdaniem winna może być zła konfiguracja hostingu?
erix
Skoro przy stu rekordach już ISP narzeka, to na bank nie masz w tabelach poprawnych indeksów.

  1. SELECT * FROM kanaly WHERE id=N
  2. Zapytanie wykonane 2 razy na bazie d4548dn_strona, wartosci średnie: query time: 8.00s

Takie zapytania przy 100 000 rekordach w bazie potrafią się wykonywać w ciągu ułamków sekundy, a nie aż w ośmiu.
adam882
hm.. mógłbyś mi podać chociaż link albo powiedzieć gdzie mogę znaleźć rozwiązanie problemu odnośnie tych indeksów? Nie do końca rozumiem o co chodzi z tymi poprawnymi indeksami - jeśli tyczy się to ID to ustawiałem go, jako klucz główny + auto zwiększanie. Wydaje mi się, że chodzi tutaj o CREATE UNIQUE INDEX , ale pierwszy raz z czymś takim się spotykam i jeszcze nie widziałem tego w aplikacjach internetowych.
erix
Nie, indeks unikalny, to specyficzny rodzaj indeksu, którego raczej nie potrzebujesz.

Poszukaj kursów MySQL; w praktycznie każdym jest ten temat poruszony.
adam882
w "Biblii PHP5" na temat indeksów mysql piszą, że używane są w przypadku wielkiej ilości danych. Wspominane jest też, że używając go tylko przy 500 rekordach możemy nie zauważyć żadnej zmiany, a w otrzymanym raporcie rekordów w "kanaly" jest koło 100. Jak dla mnie to jakaś paranoja. Może jakiś spam-bot przyczepił się do mojej stronki i notorycznie zżera transfer, obciążając tym samym bazę? Bo jak to jest możliwe, że sama podstrona z danymi zapytaniami wczytuje się w ok. 0.02s , a w raporcie otrzymuję, że zapytania przekraczają 10 sekund?
erix
Cytat
w "Biblii PHP5" na temat indeksów mysql piszą, że używane są w przypadku wielkiej ilości danych. Wspominane jest też, że używając go tylko przy 500 rekordach możemy nie zauważyć żadnej zmiany, a w otrzymanym raporcie rekordów w "kanaly" jest koło 100.

Ok, to tylko pozornie - przy większym obciążeniu już kilka może dać w kość.

Bez indeksów, to tak, jakbyś szukał w niealfabetycznym słowniku wyjaśnienia jakiegoś terminu strona po stronie. Mając indeks, sprawdzasz w spisie treści, gdzie ono jest i czytasz tylko opis.
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.