Comment augmenter le nombre maximum de connexions dans postgres?

109

J'utilise Postgres DB pour mon produit. Lors de l'insertion par lots avec slick 3, je reçois un message d'erreur:

org.postgresql.util.PSQLException: FATAL: désolé, trop de clients déjà.

Mon opération d'insertion par lots sera plus de milliers d'enregistrements. La connexion maximale pour mes postgres est de 100.

Comment augmenter le nombre maximum de connexions?

Jet
la source
Utilisez un pool de connexion comme pgBouncer ou pgPool
Frank Heikens
2
1. Vérifiez d'abord si votre middleware ne maintient pas trop de connexions ouvertes ou s'il y a des fuites. 2. (peut-être) utiliser ensuite un pooler de connexions. 3. N'augmentez (presque) jamais le nombre de connexions autorisées sur ce type de problème, dans la plupart des cas cela aggravera les choses. (sauf si vous êtes absolument sûr)
joop

Réponses:

221

Augmenter simplement max_connectionsest une mauvaise idée. Vous devez augmenter shared_bufferset kernel.shmmaxaussi.


Considérations

max_connectionsdétermine le nombre maximal de connexions simultanées au serveur de base de données. La valeur par défaut est généralement de 100 connexions.

Avant d'augmenter votre nombre de connexions, vous devrez peut-être augmenter votre déploiement. Mais avant cela, vous devez vous demander si vous avez vraiment besoin d'une limite de connexion accrue.

Chaque connexion PostgreSQL consomme de la RAM pour gérer la connexion ou le client qui l'utilise. Plus vous avez de connexions, plus vous utiliserez de RAM qui pourrait à la place être utilisée pour exécuter la base de données.

Une application bien écrite n'a généralement pas besoin d'un grand nombre de connexions. Si vous avez une application qui nécessite un grand nombre de connexions, envisagez d'utiliser un outil tel que pg_bouncer qui peut regrouper les connexions pour vous. Comme chaque connexion consomme de la RAM, vous devriez chercher à minimiser leur utilisation.


Comment augmenter le nombre maximum de connexions

1. Augmenter max_connectionetshared_buffers

dans /var/lib/pgsql/{version_number}/data/postgresql.conf

changement

max_connections = 100
shared_buffers = 24MB

à

max_connections = 300
shared_buffers = 80MB

Le shared_buffersparamètre de configuration détermine la quantité de mémoire est dédiée à PostgreSQL à utiliser pour la mise en cache des données .

  • Si vous avez un système avec 1 Go ou plus de RAM, une valeur de départ raisonnable pour shared_buffers est 1/4 de la mémoire de votre système.
  • il est peu probable que vous utilisiez plus de 40% de RAM pour fonctionner mieux qu'une petite quantité (comme 25%)
  • Sachez que si votre système ou votre version PostgreSQL est 32 bits, il peut ne pas être pratique de définir shared_buffers au-dessus de 2 ~ 2,5 Go.
  • Notez que sous Windows, les valeurs élevées pour shared_buffers ne sont pas aussi efficaces, et vous pouvez trouver de meilleurs résultats en le maintenant relativement bas et en utilisant davantage le cache du système d'exploitation. Sous Windows , le plage utile est 64Mo à 512Mo .

2. Changez kernel.shmmax

Vous devrez augmenter la taille maximale du segment du noyau pour qu'elle soit légèrement plus grande que le shared_buffers.

Dans le fichier, /etc/sysctl.confdéfinissez le paramètre comme indiqué ci-dessous. Cela prendra effet lors du postgresqlredémarrage (la ligne suivante rend le noyau maximum 96Mb)

kernel.shmmax=100663296

Références

Connexions Postgres Max et tampons partagés

Réglage de votre serveur PostgreSQL

Ankit
la source
très bonne réponse. quelques questions .. comment 100663296 est-il égal à 96 Mo? et pourquoi changeons-nous shmmax qu'est-ce que cela fait?
Robbo_UK
3
100663296 octets = 96 Mo (en binaire). shmmax est la taille maximale d'un segment de mémoire partagée . Maintenant que nous avons augmenté la taille des tampons partagés, nous devons changer shmmax pour accueillir l'augmentation de la mémoire pour la mise en cache.
Ankit
1
@Robbo_UK 96 * 1024 * 1024 = 100663296
skrebbel
6
Vous pouvez utiliser PGTune pour vous aider à déterminer ces paramètres pour votre système
Yoan Tournade
11
Vérifiez votre paramètre kernel.shmmax actuel ( cat /proc/sys/kernel/shmmax) avant de le modifier. Sur les systèmes modernes, la valeur est déjà ridiculement élevée et ne devrait pas être modifiée. Le mien est défini 18446744073692774399par défaut sur Ubuntu 18.04.
Carl Zulauf
30

Ajoutant à l'excellente réponse de Winnie,

Si quelqu'un ne parvient pas à trouver l'emplacement du fichier postgresql.conf dans votre configuration, vous pouvez toujours demander le postgres lui-même.

SHOW config_file;

Pour moi, changer les max_connections seul a fait l'affaire.

Albatros Jinxer
la source
2
Je vous remercie. Dans Ubuntu 18.04, c'est/etc/postgresql/11/main/postgresql.conf
gies0r
1

modifier la variable max_connections dans le fichier postgresql.conf situé dans / var / lib / pgsql / data ou / usr / local / pgsql / data /

Archana
la source
2
Pourquoi pg_hba.conf? Il n'a aucun paramètre sur le nombre de connexions, seulement comment se connecter. postgresql.conf d'un autre côté .... Mais des centaines de connexions sont une mauvaise idée, ne le faites pas, utilisez un pool de connexions ou souffrez de problèmes de performances. PostgreSQL 8.3 est EOL depuis de nombreuses années, veuillez utiliser une version à jour.
Frank Heikens