Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][Typo3] Przekroczony limit połączeń do bazy, mysql_connect i myslq_pconnect
windman
post 3.03.2009, 10:54:56
Post #1





Grupa: Zarejestrowani
Postów: 184
Pomógł: 13
Dołączył: 7.01.2008

Ostrzeżenie: (0%)
-----


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

Ten post edytował windman 3.03.2009, 11:13:45
Go to the top of the page
+Quote Post
ucho
post 3.03.2009, 11:47:52
Post #2





Grupa: Zarejestrowani
Postów: 300
Pomógł: 32
Dołączył: 31.07.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
windman
post 3.03.2009, 11:54:36
Post #3





Grupa: Zarejestrowani
Postów: 184
Pomógł: 13
Dołączył: 7.01.2008

Ostrzeżenie: (0%)
-----


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?

Ten post edytował windman 3.03.2009, 11:55:13
Go to the top of the page
+Quote Post
ucho
post 3.03.2009, 14:38:17
Post #4





Grupa: Zarejestrowani
Postów: 300
Pomógł: 32
Dołączył: 31.07.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
windman
post 3.03.2009, 15:56:55
Post #5





Grupa: Zarejestrowani
Postów: 184
Pomógł: 13
Dołączył: 7.01.2008

Ostrzeżenie: (0%)
-----


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?

Ten post edytował windman 3.03.2009, 15:58:01
Go to the top of the page
+Quote Post
ucho
post 3.03.2009, 16:20:37
Post #6





Grupa: Zarejestrowani
Postów: 300
Pomógł: 32
Dołączył: 31.07.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
windman
post 3.03.2009, 16:52:03
Post #7





Grupa: Zarejestrowani
Postów: 184
Pomógł: 13
Dołączył: 7.01.2008

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:20