Zrozumienie obsługi połączeń

Ukończone

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:

  1. W witrynie Azure Portal przejdź do serwera usługi Azure Database for PostgreSQL.
  2. W menu po lewej stronie wybierz pozycję Parametry serwera.
  3. Na pasku wyszukiwania wyszukaj PgBouncer.
  4. Ustaw ustawienie pgbouncer.enabled na wartość true, aby włączyć funkcję PgBouncer. To ustawienie nie wymaga ponownego uruchomienia serwera.
  5. Ustaw pgbouncer.default_pool_size liczbę połączeń na wymaganą parę użytkowników/bazy danych. Wartość domyślna to 50.
  6. 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.