web-dev-qa-db-fra.com

Quel est le sens d'utiliser server_lifetime avec pgbouncer?

J'ai trouvé server_lifetime Option dans PGBouncer Config, et j'essaie de déstabiliser si cela est vraiment nécessaire dans notre cas.

https://pgbouncer.github.io/config.html

Le poolier essaiera de fermer les connexions de serveur qui ont été connectées plus longtemps que cela. Le réglage sur 0 signifie que la connexion doit être utilisée une seule fois, puis fermée. [secondes]

Valeur par défaut: 3600.0

Quel est le sentiment de fermeture et de réouverture des connexions?

Pourquoi le DOC dit-il "va essayer"? Peut pgbouncer échouer sur cette opération?

2
raacer

Ceci est la base de PGBOOUNCER ou de tout logiciel de pooleur - le travail principal de PGBouncer réutilise les connexions PostgreSQL. Créer de nombreuses connexions peut être très coûteuse pour des sessions courtes - avec des requêtes rapides. Lorsque la connexion physique peut être partagée (réutilisée) pour plus de clients, vous pouvez obtenir une exécution beaucoup plus rapide.

Deuxième rôle important de PGBouncer et de logiciels similaires est une protection contre la surcharge. PostgreSQL n'a pas de pooling interne - tout utilisateur connecté peut exécuter n'importe quel SQL. Il existe de nombreuses applications avec des connexions de ralenti long. Ces applications nécessitent de la hauteur MAX_CONNECTION numéro. L'hypothèse cachée est une activité faible sur ces connexions. Mais parfois peut être assez élevée, des demandes assez élevées sur de nouveaux connecteurs et la base de données peut être surchargée. Le MAX_CONNECTION devrait être d'environ 10 x cœurs CPU. La valeur inadéquate ne protège pas la base de données contre la surcharge et la finition par échec. Pour cette application, peut être une solution de sécurité PGBouncer - ce logiciel est capable de partager des connexions d'inactivité physiques pour beaucoup de clients.

Le server_lifetime Applique le retour des sources allouées au système d'exploitation. Certaines sources (comme la mémoire) sont gérées en interne et il est réduit de retour au système d'exploitation (généralement). Certaines opérations coûteuses de mémoire peuvent nécessiter beaucoup de mémoire. Première fois que cette mémoire est allouée à partir du système. La prochaine fois que cette mémoire est gérée par PostgreSQL uniquement - il est beaucoup moins cher et plus rapide. Mais parfois, cela peut être inefficace aussi. PGBouncer n'a pas d'informations quel processus a la mémoire préallocate - et parfois la mémoire peut être meilleure. La sauvegarde est server_lifetime. Une heure est une valeur conservatrice - et peut être plus courte - 10 minutes. PGBouncer Fermer uniquement la connexion active - Donc, si la connexion est utilisée par n'importe quel client: transaction ouverte, commande longue active, .. server_lifetime ne peut pas être appliqué.

3
Pavel Stehule