bloker
20.01.2009, 21:06:25
Witam.
Mam kilka tysiecy zapisow/odczytow na tabeli. Dysk pracuje bez zarzutów. Co zrobic, by baza dzialala optymalniej? Bo chodzi strasznie wolno...
Z gory dziekuje za odpowiedz!
prond
20.01.2009, 21:35:22
Sprawdź, czy za każdym jest otwierane nowe połączenie do bazy. Ta operacja jest niestety kosztowna w przypadku postgresa, dlatego warto trzymać cały czas otwarte połączenie.
Pomocnym rozwiązaniem jest tutaj pgpool.
Kolejna kwestia to autocommit. Jeżeli robisz po kolei wiele insertów zapakuj je pomiędzy polecenia BEGIN i COMMIT.
Daj znać, czy jest poprawa. Zobaczy się co dalej.
bloker
20.01.2009, 21:48:03
Sa to pojedyncze uruchamiane pliki php z zapytaniami, tylko tych zapytan jest wiele... ramu 6 GB wolnego 3 procki w 60% wolne...
Zatyka się po przy wiekszym ruchu (liczba procesow apache nie rosnie, ale rosnie liczba procesow bazy)
Wyglada jakby byla bariera co do jednoczesnych odczytow/zapisow z tabeli...
Naprawde nie wiem co jest :/
EDIT: zwiekszenie o 10% ruchu do bazy prowadzi do tego, ze tworzy się wiele polaczen i kazde stoi
c3zi
21.01.2009, 09:26:07
Spróbuj użyć funkcji mysql_pconnect.
Otwiera stałe połączenie z bazą.
bloker
21.01.2009, 10:44:43
Hmmm... byloby to dosc niestosowne, ponieważ obsługuję dość poważny serwis i statystycznie:
- odwolan do skryptu jest okolo 3/4 mln na godzinę
- około 100 UU na sekundę otwierałoby polaczenie z bazą (wiec po chwili mialbym ok 5tys otwartych połączeń)
Przy takiej ilości odwołań: procek, dysk, pamięć wszystko działa super... ale baza nie wyrabia. W jaki sposób mogłbym zoptymalizować bazę?
c3zi
21.01.2009, 11:18:49
Przecież mysql_pconnect nie nawiązuje nowego połączenia, jeśli już istnieje. To jest jedna z różnic między mysql_connect.
Dodatkowo przy takiej ilości zapisu/odczytu przeydałby się pożądny dysk.
bloker
21.01.2009, 12:06:53
Wg statystyk dysk zapis/odczyt nie jest obciążony nawet w 2% ... a nie mogę utrzymywać 3000 połączen (isntiejących procesów) - zbyt duże obciązenie systemu (6GB RAMu nie wystarczy

)
Zbłąkany
21.01.2009, 19:53:01
@bloker:
zajrzyj
tutaj i pobaw się tymi ustawieniami

Dodatkowo sprawdziłbym strukturę bazy danych, relację, itp. Może warto zrobić optymalizację bazy? Nie masz czasem jakiegoś wyzwalacza ustawionego przy tych zapytaniach?
@c3zi:
czy ty umiesz czytać ze zrozumieniem?
prond
23.01.2009, 14:53:32
Jeszcze jedna rzecz przyszła mi do głowy.
Spróbuj wymusić nestedloops - to wolniejszy algorytm łączenia tabel,
ale na pewno mniej obciąża zasoby komputera.
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.