Czy zbyt wiele bezczynnych połączeń może wpłynąć na wydajność PostgreSQL 9.2?

8

Niektóre zapytania na moim serwerze bazy danych wydają się długo odpowiadać i uważam, że użycie procesora jest wysokie. Podczas pracy ps auxwidzę ~ 250 „bezczynnych” połączeń (które uważam za zbyt wiele). Nie zacząłem przeprowadzać pełnej diagnozy, ale chciałem wiedzieć, czy to dobre miejsce, aby zacząć szukać.

Używam również PgBouncer z pulą na poziomie transakcji. Podejrzewam, że mogę łatwo zmniejszyć liczbę idlepołączeń, dostosowując wielkość puli. Nie chcę jednak robić zbyt wielu zmian, chyba że istnieje ku temu dobry powód.

Czy wiele idlepołączeń w PostgreSQL 9.2 może wpływać na wydajność?

Dziękuję bardzo!

Juan Carlos Coto
źródło
co oznacza „zbyt wiele bezczynnych połączeń”? dziesiątki? setki?
jap1968
Edytowane pytanie. Dzięki za zwrócenie na to uwagi. Żeby było jasne, ostatni wynik to ~ 250
Juan Carlos Coto,
Może? Wiem, że Oracle DBA poprosiło ludzi o ustawienie narzędzi programistycznych do korzystania z jednej sesji dla wszystkich okien (zamiast nowej sesji dla każdego okna), gdy programistyczna baza danych zaczęła działać bardzo wolno. Dokładna liczba, która liczy się jako „zbyt wiele”, prawdopodobnie będzie zależeć od zasobów dostępnych w bazie danych.
FrustratedWithFormsDesigner

Odpowiedzi:

3

Poważnie wątpię, czy problemem są bezczynne połączenia. PostgreSQL jest w stanie obsłużyć bezczynne sesje, ponieważ nie wymagają prawie żadnych zasobów. Z drugiej strony aktywne sesje są o wiele bardziej prawdopodobne przyczyną spowolnienia.

Zobacz https://wiki.postgresql.org/wiki/Number_Of_Database_Connections w celu uzyskania informacji na temat liczby połączeń z bazą danych.

Max Vernon
źródło
Bezczynne sesje z niezaangażowanymi transakcjami są często niegrzecznymi sprawcami!
Philᵀᴹ
Zgadzam się, Phil, chociaż tak naprawdę nie chodzi o PostgreSQL - chodzi raczej o to, jak napisany jest koniec klienta (chyba że coś mi brakuje).
Max Vernon
Zobacz powiązane pytanie na ten temat . Naprawdę by to pomogło, gdybyś w to wpadł. Dzięki!
Juan Carlos Coto,
W rzeczywistości bezczynne połączenia mają dużo narzutu (pamięci) i należy ich unikać (myślę, że przydziela ono około 10 MB na połączenie, więc w twoim przypadku marnowałbyś co najmniej
2,5 GB
1
@ MaxVernon - na moim działającym serwerze postgresql 9.5 mam 25 bezczynnych procesów dla kolumny RES, np. proces trwa średnio około 12 MB (zakres: 4,5 MB - 584 MB, podejrzewam, że większe mają nieprzypisany tx).
cerd