Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][Typo3] Przekroczony limit połączeń do bazy
Forum PHP.pl > Forum > Bazy danych > MySQL
windman
Witam,

Mam pewien problem z jedną stroną zbudowaną na Typo3.
Strona rejestruje kilkuset użytkowników na dobę.
Pojawił się ostatnio problem z limitem połączeń do bazy MySQL / 100.
Typo3 chodzi na mysql_pconnect.
Na stronie jest też umieszczony mały skrypt wykonujący połączenie do innej bazy (ten sam host), użytkownik inny niż dla Typo3.
Skrypt to proste zapytanie, nie ma mowy o zapętleniu.

Skoro mysql_connect i mysql_pconnect wykorzystują jedno połączenie dla danego usera (Typo3 i skrypt to łącznie 2 oddzielne połączenia) to skąd ten problem z limitem?

Do głowy przychodzi mi jedno rozwiązanie:
Wspomniany skrypt pobiera także za pomocą funkcji fopen zdjęcie z kamery internetowe (inny host). Plik ten nie zawsze jest dostępny, przy większej liczbie zapytań funkcja nie działa zbyt sprawnie.
Czy to, że czas wykonywania skryptu nie jest optymalny może wpłynąc na liczbę połączeń do MySQLa?

Pozdrawiam
ucho
Pconnect nie oznacza, że będzie używane tylko 1 połączenie dla wszystkich instancji skryptu - oznacza tylko, że po zakończeniu skryptu, połączenie z którego korzystał nie będzie zamykane, tak by mógł z niego skorzystać następny. Więc jest szybciej o czas potrzebny to stworzenia połączenia, ale limit jednoczesnych połączeń do bazy nadal może być problemem pod obciążeniem.
windman
Cytat(ucho @ 3.03.2009, 11:47:52 ) *
Więc jest szybciej o czas potrzebny to stworzenia połączenia, ale limit jednoczesnych połączeń do bazy nadal może być problemem pod obciążeniem.

Czyli, gdy 50 przeglądarek wywoła w tym samym momencie skrypt z mysql_pconnect to zostanie nawiązanych 50 połączeń do bazy?

W tym samym przypadku mysql_connect nawiąże tylko jedno połączenie?

Mam jeszcze pytanie odnośnie klasy mysqli... w opisywanym przykładzie i z użyciem tej klasy zostanie nawiązanych także 50 połączeń do bazy?
ucho
50 jednoczesnych requestów:
- connect() - stara się utworzyć 50 nowych połączeń
- pconenct() - jeśli jest mniej niż 50 wolnych połączeń to postara się stworzyć brakujące połączenia
Przy limicie np. 30 połączeń żadne nie przejdzie smile.gif Mysqli_* raczej rządzi się takimi samymi prawami co zwykły mysql_*, i zliczany jest tak samo. Jedyne co możesz/powinieneś zrobić to zoptymalizować zapytania sql i zwalniać połączenie jak tylko nie jest potrzebne i/lub łączyć się dopiero gdy jest to potrzebne
windman
Cytat(ucho @ 3.03.2009, 14:38:17 ) *
50 jednoczesnych requestów:
- connect() - stara się utworzyć 50 nowych połączeń

Najwyraźniej coś źle zrozumiałem...

Po przeczytaniu tego ...

"Jeśli, ponownie wywołamy mysql_connect() z tymi samymi argumentami, nie zostanie nawiązane nowe połączenie, lecz zamiast tego, zostanie zwrócony identyfikator obecnie otwartego połączenia. Parametr nowe_połączenie modyfikuje to zachowanie i sprawia, że mysql_connect() zawsze otwiera nowe połączenie"

... myślałem, żę mysql_connect() używa już otwartego połączenia, jeżeli to istnieje... więc jak jest?
ucho
To dotyczy sytuacji w obrębie jednego skryptu - jeśli wywołasz kilka razy mysql_connect() z tymi samymi parametrami nie będzie tworzone nowe połączenie ale przy kolejnym uruchomieniu tego skryptu zostanie już stworzone nowe połączenie.
windman
Cytat(ucho @ 3.03.2009, 16:20:37 ) *
To dotyczy sytuacji w obrębie jednego skryptu - jeśli wywołasz kilka razy mysql_connect() z tymi samymi parametrami nie będzie tworzone nowe połączenie ale przy kolejnym uruchomieniu tego skryptu zostanie już stworzone nowe połączenie.

ok, robi się coraz jaśniej...
załóżmy, że mam limit 30 połączeń, skrypt wykonuje się 10 sekund a na stronę mniej więcej jednocześnie wchodzi 60 odwiedzających...w tym przypadku strona wyświetli się tylko dla pierwszej 30?
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.