Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przeciążony mysql.
Forum PHP.pl > Forum > Bazy danych > MySQL
yacoos
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
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
A jeszcze pytanko sie pojawia : czy masz pozakladane indexy na pola po ktorych dokonujesz zapytan ( OR )
yacoos
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
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
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.. sad.gif
Czyli index nic nie dal, chyba ze jakos zle go zrobilem..
Sh4dow
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.