Zrozumienie obsługi połączeń
Usługa Postgres używa modelu połączenia opartego na procesie. Nawiązywanie połączenia obejmuje system operacyjny i alokację niewielkiej ilości pamięci. Każde zapytanie SQL jest wykonywane przy użyciu bieżącego połączenia.
Stany połączenia
Połączenie może znajdować się w jednym z czterech stanów:
- aktywne — aktywne połączenia, które obecnie obsługują zapytania.
- bezczynne — otwarte połączenia, które nie są używane.
- bezczynna w transakcji - połączenie czeka, nie wykonując żadnej pracy. Użyj pg_stat_activity, aby zrozumieć, co robi połączenie oraz jak długo jest ono w danym stanie.
- bez działania w transakcji (przerwane) — połączenia, które były wcześniej bezczynne w transakcji, ale są teraz przerwane.
Model połączenia oparty na procesie sprawia, że utrzymanie wielu bezczynnych połączeń jest kosztowne.
Maksymalna liczba połączeń
Usługa PostgreSQL ogranicza maksymalną liczbę równoczesnych połączeń z serwerem w dowolnym momencie przy użyciu parametru serwera o nazwie max_connections. W usłudze Azure Database for PostgreSQL wartość domyślna zależy od warstwy obliczeniowej. Dozwolona wartość to od 25 do 5000.
Lokalna implementacja bazy danych PostgreSQL rezerwuje niektóre połączenia dla administratora w celu zachowania integralności bazy danych. Ta rezerwacja zazwyczaj stanowi 15% z wartości max_connections.
Usługa Azure Database for PostgreSQL jest rozwiązaniem zarządzanym i automatycznie rezerwuje trzy połączenia w celu monitorowania serwera elastycznego.
Notatka
Nie ma parametru serwera umożliwiającego zarządzanie superuser_reserved_connections w usłudze Azure Database for PostgreSQL.
Buforowanie połączeń
Aplikacje klienckie, które często otwierają i zamykają połączenia, mogą doświadczać opóźnienia połączeń, co skutkuje niższymi transakcjami na sekundę i ogólnym większym opóźnieniem aplikacji.
Usługa Azure Database for PostgreSQL zaleca buforowanie połączeń zamiast częstego otwierania i zamykania połączeń. Buforowanie połączeń polega na ponownym użyciu istniejących połączeń zamiast ich zamykania i tworzenia od nowa. Ten proces zmniejsza opóźnienie połączenia i umożliwia większe transakcje bazy danych na sekundę dla baz danych na serwerze.
Buforowanie połączeń ustanawia stały zestaw połączeń podczas uruchamiania serwera, a te połączenia są następnie utrzymywane. Buforowanie połączeń pomaga również zmniejszyć fragmentację pamięci spowodowane przez ciągłe tworzenie nowych połączeń na serwerze.
PGBouncer
to rozwiązanie do buforowania połączeń wbudowane w usługę Azure Database for PostgreSQL. Aby włączyć narzędzie pgBouncer:
- W witrynie Azure Portal przejdź do serwera usługi Azure Database for PostgreSQL.
- W menu po lewej stronie wybierz pozycję Parametry serwera.
- Na pasku wyszukiwania wyszukaj PgBouncer.
- Ustaw ustawienie pgbouncer.enabled na wartość true, aby włączyć funkcję PgBouncer. To ustawienie nie wymaga ponownego uruchomienia serwera.
- Ustaw pgbouncer.default_pool_size liczbę połączeń na wymaganą parę użytkowników/bazy danych. Wartość domyślna to 50.
- Ustaw parametr pgBouncer.pool_mode na TRANSACTION.
Notatka
Narzędzie PgBouncer jest obsługiwane w warstwach obliczeniowych ogólnego przeznaczenia i zoptymalizowanych pod kątem pamięci w sieciach z dostępem publicznym i prywatnym. PgBouncer nie jest obsługiwany w przetwarzaniu o zmiennym obciążeniu. Gdy warstwa obliczeniowa zostanie zmieniona z Ogólnego przeznaczenia lub Zoptymalizowanej pod kątem pamięci na Serię z możliwością zwiększania mocy, funkcjonalność PGBouncer zostanie utracona.