yacoos
14.12.2005, 01:21:22
Witam,
Mam problem z dość sporym serwisem, który generuje koszmarne obciążenie na sererze (poprzez mrocesy mysqla).
Juz podaję więcej szczegółów ktore udalo mi sie włowić.
Na serwis wchodzi ok 5-6tys unikalnych gosci na dobę.
Juz po chwili od udostepnienia serwisu load serwera niesamowicie rosnie a mysql polyka pamiec starsznie szybko.
Strukttura bazy z ktorej korzysta serwis jest bardzo toporna.. Głowna tabela zawiara ponad 30tys rekordow i wazy ponad 2mb.
Po wykonaniu 'show proccesslist' w 90% przypadkow widac 2 lub 3 zapytania z duza iloscia OR wnajdujacch sie w sekcji WHERE.. czy to moze byc przyczyna tak starsznego spowalniania.. ?
Czy zrzerobienie bazy w celu wyeliminowanie 'OR'ow mogloby rozwiazac problem?
Ewentualnie jakie sąmetody żeby dokladnie zdiagnozować co powoduje ten problem.
Pozdrawiam i bardzo proszę o odpowiedz.
yacoos
Sh4dow
14.12.2005, 10:58:23
zoptymalizuj te zapytania, napisz je jakos inaczej lub tez rozbij moze na mniejsze. Staraj sie nie uzywac OR strasznie spowalnia zapytania.
Liczba 2-3 tys unikalnych wejsc na dobe to nie jest ilosc ktora mogla by tak obciazyc przecietnie zbudowana baze, a napewno nie z tak małą iloscia danych.
Pracuje na duzo wiekszych bazach z mysqlem i o parokrotnie przewyzszajacej ilosci unikalnych wejsc (chociaz raczej powinno sie tutaj brac pod uwage odslony bo one generuja zapytania)
Pokaz zapytania moze cos sie uda rozwiazac.
pafka
14.12.2005, 11:23:03
A jeszcze pytanko sie pojawia : czy masz pozakladane indexy na pola po ktorych dokonujesz zapytan ( OR )
yacoos
14.12.2005, 11:29:01
No właśnie zastanawiam się nad zmianą tych zapytań.. Jednach chciałbym mieć pewność że ta czynność rozwiąże problem - czyli że właśnie to jest przyczyną...
Jak wrócę do domu to postaram się podesłać zapytania...
A czy jest jeszcze jakiś sposób ktorym mogę to zdiagnozować?
PS. Nie.. na polach, korych dostyczy 'OR' nie ma indeksów.. A powinny byc? Jakiego typu?
Pozdrawiam,
yacoos
pafka
15.12.2005, 17:41:28
Co to sa za pola po kotrych dokonujesz porownan ?
Powinny byc, po ta sa indexy zeby przyspieszyc wyszukiwanie, bez indexow baza nie wie gdzie ( w ktorym rekordzie) sa poszukiwane wartosci i wtedy leci od poczatku do konca po calej tablicy i robi porownania
Kiedy masz index zalozony to szybko potrafi sobie zlokalizowac dany rekord bez koniecznosci przeszukiwania calej tabeli.
Pozakladaj indexy i zobacz jak sie zmieni sytuacja.
Zobacz ile dla kazdej strony jest wykonywanych zapytan do bazy, byc moze uda sie zredukowac ich ilosc (polaczyc kilka zapytan w jedno ? itp ...) ? kazde dodatkowe zapytanie to nowe obciazenie dla bazy
Jesli dane w bazie nie sa czesto aktualizowane to moze pomysl o cache'owaniu wygenerowanej strony i/lub o cache'owaniu wynikow z bazy
yacoos
15.12.2005, 18:52:40
Witam,
Dziękuję za zainteresowanie.
Pola ktorych todtycza te OR'y to 3 pola typu int(11)
Zalozylem na te 3 pola index.. zobacze czy to cos pomoze..
Niestety.. kilkanascie osob w serwisie sie nazbieralo i juz load podskoczyl z 1 do 16..

Czyli index nic nie dal, chyba ze jakos zle go zrobilem..
Sh4dow
15.12.2005, 19:51:20
Sprawdzaj sobie czas wykonywania poszczegolnych zapytan, jesli zobaczysz ze load jest duzy sprawdz processlist co wisi. i pokaz te zapytania moze da sie z nimi cos zrobic
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.