Utiliser le regroupement de connexions

Important

La version Lakebase Autoscaling est la dernière de Lakebase, avec l'évolutivité automatique, la mise à l’échelle jusqu'à zéro, la création de branches et la restauration instantanée. Pour connaître les régions prises en charge, consultez disponibilité de la région. Si vous êtes un utilisateur Lakebase Provisionné, consultez Lakebase Provisioned.

Lakebase inclut un pool de connexions PgBouncer intégré qui gère un pool de connexions serveur et les partage sur de nombreuses connexions clientes. Le pooler prend en charge jusqu’à 10 000 connexions simultanées, ce qui en fait un bon ajustement pour les fonctions serverless, les API web et d’autres applications qui ouvrent de nombreuses connexions de courte durée.

Le regroupement de connexions nécessite l’authentification par mot de passe Postgres native. Il n’est pas disponible pour les rôles d’identité OAuth ou Azure Databricks.

Fonctionnement du regroupement de connexions

Chaque connexion Postgres consomme des ressources de serveur, car Postgres crée un processus distinct pour chaque client. Les applications qui ouvrent de nombreuses connexions de courte durée, telles que les API web et les fonctions serverless, peuvent épuiser rapidement la limite de connexion du serveur.

Le pool de connexions se trouve entre votre application et Postgres. Les clients se connectent au pooler et le pooleur transfère les requêtes vers un plus petit pool de connexions serveur réelles. Lorsqu’une transaction est terminée, le poolur retourne la connexion du serveur au pool, le rendant disponible pour le client suivant.

Lakebase exécute PgBouncer en mode transactionnel. En mode transactionnel, une connexion de serveur est conservée pendant la durée d’une transaction unique, puis retournée au pool. Cela permet à de nombreux clients de partager un petit pool de connexions serveur.

Le mode transactionnel améliore l’efficacité de la connexion, mais limite certaines fonctionnalités Postgres qui nécessitent une connexion de serveur persistant. Consultez les limitations du mode transaction.

Pools de connexions

PgBouncer crée un pool distinct pour chaque base de données et combinaison d’utilisateurs. Deux utilisateurs se connectant à la même base de données obtiennent des pools indépendants. La taille de chaque pool est d’environ 90% de la limite de connexion directe du calcul.

Lorsque toutes les connexions d’un pool sont en cours d’utilisation, les nouvelles demandes clientes attendent dans une file d’attente. Si une connexion serveur ne devient pas disponible dans les 2 minutes, le client reçoit une erreur de délai d’expiration.

Limites de connexion

Trois limites régissent le regroupement de connexions :

Limite Valeur Qu’est-ce qu’il contrôle ?
Connexions clientes (max_client_conn) 10 000 Nombre maximal de connexions de votre application à PgBouncer
Taille du pool (default_pool_size) ~90% de max_connections Connexions de serveur actif par paire (utilisateur, base de données)
Connexions directes (max_connections) Varie en fonction de la taille du calcul Nombre maximal de connexions Postgres directes

La limite de connexion directe dépend de votre taille de calcul. Par exemple, un calcul de 8 CU prend en charge 1 678 connexions directes et un calcul de 16 CU prend en charge 3 357. Pour obtenir la liste complète, consultez spécifications de calcul.

Le regroupement de connexions permet à votre application de prendre en charge beaucoup plus d’utilisateurs simultanés que la limite de connexion directe seule autoriserait.

Prerequisites

  • Votre projet de mise à l’échelle automatique Lakebase doit être actif.
  • Vous devez avoir un rôle de mot de passe Postgres natif dans le projet. Pour obtenir des instructions, consultez Créer un rôle de mot de passe Postgres natif.
  • Pour utiliser le pooleur en lecture seule, vous devez disposer d’un point de terminaison de haute disponibilité avec l’autorisation d’accès aux instances de calcul en lecture seule activées. Consultez La haute disponibilité.

Activer le regroupement de connexions

  1. Dans l’application Lakebase, accédez à votre projet, puis cliquez sur Se connecter.
  2. Sélectionnez la branche et le calcul auquel vous souhaitez vous connecter.
  3. Dans la liste déroulante Rôle , sélectionnez un rôle de mot de passe Postgres natif. Le bouton bascule de regroupement de connexions est visible uniquement lorsqu’un rôle de mot de passe est sélectionné. Il est masqué pour les rôles d’identité OAuth et Azure Databricks.
  4. Activez le regroupement de connexions.
  5. Copiez le chaîne de connexion et utilisez-le dans votre application.

Boîte de dialogue de connexion montrant l'interrupteur de pool de connexions activé pour un rôle de mot de passe Postgres natif.

Formats de chaîne de connexion

Les chaînes de connexion du pooler utilisent un nom d’hôte différent de celui des connexions de base de données directes :

Catégorie Format du nom d’hôte Quand utiliser
Pool de lecture-écriture <endpoint-id>-pooler.<region>.<cloud>.databricks.com Tout le trafic d’écriture et de lecture routé via le pooler
Pooler en lecture seule <endpoint-id>-ro-pooler.<region>.<cloud>.databricks.com Lire le trafic uniquement. Nécessite un point de terminaison de haute disponibilité avec accès en lecture activé.

Les deux types de pool utilisent le port 5432.

Note

Copiez directement votre string de connexion au pool depuis la boîte de dialogue Connect dans l’application Lakebase pour obtenir le nom d'hôte approprié concernant votre point de terminaison, région et cloud.

Limitations du mode transactionnel

Les fonctionnalités Postgres suivantes ne sont pas disponibles lors de l’utilisation du pool de connexions :

  • Instructions préparées au niveau SQL : PREPARE et DEALLOCATE les instructions ne sont pas prises en charge en mode transactionnel. Les instructions préparées par le pilote (utilisées en interne par psycopg2, node-postgres, JDBC et des bibliothèques similaires) fonctionnent correctement grâce à la prise en charge de PgBouncer au niveau du protocole. Pour JDBC, si vous voyez des erreurs liées aux instructions préparées, définissez prepareThreshold=0 pour désactiver la mise en cache des instructions préparées côté serveur nommée.

  • Paramètres au niveau de la session : SET les commandes ne persistent pas entre les transactions, car chaque transaction peut utiliser une connexion serveur différente. Par exemple:

    BEGIN;
    SET search_path TO myschema;
    SELECT * FROM mytable; -- works in this transaction
    COMMIT;
    -- connection returns to pool after COMMIT
    SELECT * FROM mytable; -- ERROR: relation "mytable" does not exist
    

    Pour appliquer définitivement un paramètre, utilisez ALTER ROLE plutôt :

    ALTER ROLE myrole SET search_path TO myschema, public;
    
  • Tables temporaires conservées par session : les tables temporaires qui persistent entre les transactions ne sont pas disponibles. Une connexion retournée au pool peut être affectée à un autre client dans la transaction suivante.

  • WITH HOLD curseurs : les curseurs déclarés avec WITH HOLD nécessitent une connexion persistante et ne sont pas pris en charge.

  • Verrous consultatifs : PgBouncer ne prend pas en charge les verrous consultatifs. Les verrous consultatifs nécessitent une connexion de serveur persistant, qui n’est pas disponible en mode transactionnel.

  • LISTEN/NOTIFY: non pris en charge. Utilisez une connexion directe (non mise en pool) pour les applications qui nécessitent une messagerie pub/sous-messagerie.

  • pg_dump et migrations de schéma: utilisez une connexion directe pour pg_dump, les migrations de schéma et d’autres outils qui dépendent de l’état de la session.

Note

Pour les applications qui nécessitent des fonctionnalités Postgres au niveau de la session, utilisez une chaîne de connexion directe à partir de la boîte de dialogue Connect sans activer l'option Connection pooling.

Étapes suivantes

  • Chaînes de connexion : référence de format de chaîne de connexion pour les connexions directes. Consultez les chaînes de connexion.
  • Créer des rôles Postgres : Comment créer des rôles de mot de passe Postgres natifs requis pour le regroupement de connexions. Consultez Créer des rôles Postgres.
  • À propos de l’authentification : comparaison des méthodes d’authentification OAuth et mot de passe. Voir à propos de l’authentification.