Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odciazyc Serwer :)
Forum PHP.pl > Forum > Bazy danych > MySQL
maximus
Mam mały problem.

Prowadzę dość popularną stronę co czasami powoduje
przeciążenie serwera w godzinach szczytu.
Wywala mi się na "too many connections"

Jeżeli chodzi o połączenia to rzeczywiście ich jest dużo.
np. na jednej stronie mam:
- na stronie coś wyciągane jest z bazy - więc jest pierwsze połączenie
- na kazdej stronie jest includowany plik wyswietlajacy banner
(banner wyciagany jest z bazy - drugie polaczenie)
- na kazdej stronie includowany jest tez plik statystyk ktory
zapisuje w bazie kilka zeczy - trzecie polaczenie

Wiec dla kazdej odslony sa realizowane trzy polaczenia - to duzo smile.gif

Widzialem kiedys takie rozwiazanie:
Wszystkie funkcje byly wzocone do jednego pliku (okolo 90KB)
Kazda strona zaczynala sie od "require_once ('funkcje.php');"

To co mnie zaciekawilo to to ze w tym pliku z funkcjami jest
tylko jedno polaczenie z baza smile.gif

Ktos moglby mi przyblizyc czy jest to rozsadne rozwiazanie dla popularnej strony?

Jak jeszcze moglbym ograniczyc ilosc polaczen z baza?

Dzieki za wszelkie propozycje.
Kinool
ograniczyc polaczenia mozna tylko w jeden sposub zmnijszyc ich ilosc biggrin.gif zamias 3 uzywaj wszystkiego w jednym na samym poczatku nawiz polaczenia z baza a potem w zapytaniach ew. dawaj id polaczenia z baza (domyslnie nie ptzrba tego robic ale dla pewnisci mozesz) i zobacz czy beda jakies wyniki? czy server tez bedzie wysypywal blad
maximus
a czy można sprawdzić czy istnieje już może połączenie z bazą i dopiero
gdy go nie ma nawiązywać nowe?

Jest taka możliwość?
akubiczek
zrób pconnect na początku i już
maximus
pconnect przy tej odwiedzalności zabiłby serwer w przeciągu kilku minut biggrin.gif
Synaps
Ja stosuje taką metode , że przed każdą operacją na bazie wykonuje metode open,
sprawdza on w tablicy połączeń czy połączenie z daną bazą jest już nawiązane,
jeśli jest to pobieram z niej uchwyt do tego połączenia. Natomiast jeśli nie ma
to tworze je i dodaje do tab z połączeniami. ( na zakończenie metoda zwraca true or
false) i po krzyku. Jest to projekt mojego przyjaciela, ktory obecnie rozwijamy aby
uzyskać adapter do operacji na różnych bazach danych, inteligentnie korzystający z
nawiązanych połączeń.
Nookie
witam,

warto by sie w Twoim przypadku rowniez zaintersowac czyms takim jak pingowanie mysql'a smile.gif

do poczytania link nizej

mysql_ping


pozdrawiam
maximus
o coś takiego mi chodziło tyle, że to nie działa tak bezproblemowo:

"Is important to remember that if your first connection to mysql don't works, mysql_ping will always return true! So, if you want to check if mysql is connected, first of all you must check if mysql_connect do not returns false and then you can begin to check mysql_ping."

Czyli dla bezpieczeństwa i tak najpierw trzeba by sprawdzać mysql_connect sad.gif
Jak to obejść?
Nookie
Jesli w skryptach uzywasz sesji lub zmiennych globalnych...
to prosto..

laczysz sie w jakims pierwszym skrypcie raz..
za pomoca mysql connect'a i sprawdzasz czy sie powiodlo..

jesli tak ustawiasz sobie jakas zmienna np. connected na 1
albo true...

a pozniej w innych skrpytach co najwyzej pingujesz.. that's all


a przynajmniej tak mi si ewydaje biggrin.gif


pozdro
toszcze
Ja tu postawilbym rowniez nad zoptymalizowaniem samej bazy (struktura, indeksy i zapytania).
Piszesz, ze baner wyciagany jest z bazy. Po co trzymac plik graficzny w bazie? O wiele lepiej (wygodniej i wydajniej) jest przechowywac w bazie jedynie URL (ew. nazwe pliku) banera.
Co do ilosci polaczen - IMHO rozwiazanie Nookie'go jest w miare optymalne.
maximus
Źle się wyraziłem - z bazy wyciągany jest oczywiście
tylko link do bannera smile.gif
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.