Inzicht in de afhandeling van verbindingen

Voltooid

Postgres maakt gebruik van een op processen gebaseerd verbindingsmodel. Het tot stand brengen van een verbinding omvat het besturingssysteem en de toewijzing van een kleine hoeveelheid geheugen. Elke SQL-query wordt uitgevoerd met behulp van een huidige verbinding.

Verbindingsstatussen

Een verbinding kan een van de volgende vier statussen hebben:

  • actieve : actieve verbindingen, die momenteel query's uitvoeren.
  • niet-actieve: open verbindingen die niet worden gebruikt.
  • niet actief in transactie: een verbinding die wacht en geen werk uitvoert. Gebruik pg_stat_activity om te begrijpen wat een verbinding doet en hoe lang deze status heeft.
  • niet-actieve transactie (afgebroken) : verbindingen die eerder niet-actief waren in transactie, maar nu zijn afgebroken.

Het procesgebaseerde verbindingsmodel maakt het duur om veel niet-actieve verbindingen te onderhouden.

Maximum aantal verbindingen

PostgreSQL beperkt het maximum aantal gelijktijdige verbindingen met de server op elk gewenst moment met behulp van een serverparameter met de naam max_connections. In Azure Database for PostgreSQL is de standaardwaarde afhankelijk van uw rekenlaag. De toegestane waarde ligt tussen 25 en 5000.

Een on-premises implementatie van PostgreSQL reserveert enkele verbindingen voor de supergebruiker om de integriteit van de database te behouden. Deze reservering is doorgaans 15% van de max_connections-waarde.

Azure Database for PostgreSQL is een beheerde oplossing en reserveert automatisch drie verbindingen om een flexibele server te bewaken.

Notitie

Er is geen serverparameter voor het beheren van superuser_reserved_connections in Azure Database for PostgreSQL.

Groepsgewijze verbindingen

Clienttoepassingen die vaak verbindingen openen en sluiten, kunnen verbindingslatentie ervaren, wat resulteert in lagere transacties per seconde en algehele hogere toepassingslatentie.

Azure Database for PostgreSQL raadt verbindingspooling aan in plaats van vaak verbindingen te openen en te sluiten. Bij het groeperen van verbindingen worden bestaande verbindingen opnieuw gebruikt in plaats van verbindingen te sluiten en opnieuw te maken. Dit proces vermindert de verbindingslatentie en maakt hogere databasetransacties per seconde mogelijk voor databases op de server.

Bij het groeperen van verbindingen wordt een vaste set verbindingen tot stand gebracht wanneer de server wordt gestart en worden deze verbindingen vervolgens onderhouden. Verbindingspooling helpt ook de geheugenfragmentatie te verminderen die wordt veroorzaakt door nieuwe verbindingen die voortdurend op de server worden gemaakt.

PGBouncer is een oplossing voor groepsgewijze verbindingen die is ingebouwd in Azure Database for PostgreSQL. PgBouncer inschakelen:

  1. Navigeer in Azure Portal naar uw Azure Database for PostgreSQL-server.
  2. Selecteer in het linkermenu Serverparameters.
  3. Zoek in de zoekbalk naar PgBouncer.
  4. Stel de instelling pgbouncer.enabled in op true om PgBouncer te activeren. Deze instelling vereist geen herstart van de server.
  5. Stel pgbouncer.default_pool_size in op het aantal verbindingen per gebruiker/databasepaar dat u nodig hebt. De standaardwaarde is 50.
  6. Stel de parameter pgBouncer.pool_mode in op TRANSACTION.

Notitie

PgBouncer wordt ondersteund in de rekenlagen Algemeen gebruik en Geoptimaliseerd voor geheugen in zowel openbare toegang als particuliere toegangsnetwerken. PgBouncer wordt niet ondersteund in de Burstable-rekenlaag. Wanneer de rekenlaag wordt gewijzigd van Algemeen gebruik of Geoptimaliseerd voor geheugen naar Burstable, gaat de PGBouncer-functie verloren.