2015-06-11 9 views
33

Ich verwende Postgres DB für mein Produkt. Während der Batch-Einsatz mit Slick 3, bekomme ich eine Fehlermeldung:Wie die maximalen Verbindungen in Postgres erhöhen?

org.postgresql.util.PSQLException: FATAL: sorry, zu viele Kunden bereits.

Meine Stapeloperation ist mehr als Tausende von Datensätzen. Max Verbindung für meine Postgres ist 100.

Wie die maximalen Verbindungen zu erhöhen?

+0

http://stackoverflow.com/questions/9798705/arval-sqlexception-fatal-sorry-too-many-clients-already-in-postgres –

+0

Verwenden Sie einen Verbindungspool wie pgBouncer oder pgPool –

+2

1. Überprüfen Sie zuerst, ob Ihre Middleware hält nicht zu viele Verbindungen offen oder gibt sie aus. 2. (Vielleicht) benutze als nächstes einen Verbindungspooler. 3. (fast) nie die Anzahl der zulässigen Verbindungen bei dieser Art von Problem zu erhöhen, in den meisten Fällen wird dies die Dinge noch schlimmer machen. (außer wenn Sie absolut sicher sind) – joop

Antwort

4

Änderung max_connections Variable in postgresql.conf Datei befindet sich in /var/lib/pgsql/data oder/usr/local/pgsql/data/

+0

Warum pg_hba.conf? Es hat keinen Parameter über die Anzahl der Verbindungen, nur wie man sich verbindet. postgresql.conf auf der anderen Seite .... Aber Hunderte von Verbindungen ist eine schlechte Idee, tun Sie es nicht, verwenden Sie einen Verbindungspool oder leiden unter Leistungsproblemen. PostgreSQL 8.3 ist seit vielen Jahren EOL, bitte verwenden Sie eine aktuelle Version. –

36

Gerade zunehmende max_connections schlechte Idee. Sie müssen auch shared_buffers und kernel.shmmax erhöhen.


Überlegungen

max_connections bestimmt die maximale Anzahl gleichzeitiger Verbindungen zum Datenbankserver. Der Standardwert ist normalerweise 100 Verbindungen.

Bevor Sie die Anzahl der Verbindungen erhöhen, müssen Sie möglicherweise Ihre Bereitstellung skalieren. Aber vorher sollten Sie überlegen, ob Sie wirklich ein erhöhtes Verbindungslimit benötigen.

Jede PostgreSQL-Verbindung benötigt RAM zum Verwalten der Verbindung oder des Clients, der sie verwendet. Je mehr Verbindungen Sie haben, desto mehr RAM wird verwendet, um die Datenbank auszuführen.

Eine gut geschriebene App benötigt normalerweise keine große Anzahl von Verbindungen. Wenn Sie eine App haben, die eine große Anzahl von Verbindungen benötigt, sollten Sie ein Tool wie pg_bouncer verwenden, das Verbindungen für Sie bündeln kann. Da jede Verbindung RAM verbraucht, sollten Sie versuchen, ihre Verwendung zu minimieren.


Wie max Verbindungen erhöhen

1. Erhöhung max_connection und shared_buffers

in /var/lib/pgsql/data/postgresql.conf

Änderung

max_connections = 100 
shared_buffers = 24MB 

zu

max_connections = 300 
shared_buffers = 80MB 

Der shared_buffers Konfigurationsparameter bestimmt, wie viel Speicher zu PostgreSQL gewidmet ist für Caching von Daten zu verwenden.

  • Wenn Sie ein System mit 1 GB RAM oder mehr haben, ein vernünftiger Ausgang Wert für shared_buffers ist 1/4 des Speichers in Ihrem System.
  • es ist unwahrscheinlich, dass Sie mit mehr als 40% des RAM finden, um besser zu arbeiten als eine kleinere Menge (wie 25%)
  • Beachten Sie, dass, wenn Ihr System oder PostgreSQL Build ist 32-bit, es könnte nicht praktisch sein, shared_buffers über 2 ~ 2,5 GB zu setzen.
  • Beachten Sie, dass unter Windows, große Werte für shared_buffers sind nicht als wirksam, und Sie können bessere Ergebnisse finden, halten es relativ niedrig und mit dem Betriebssystem-Cache mehr statt. Unter Windows ist der nützliche Bereich 64 MB bis 512 MB.

2. Ändern kernel.shmmax

Sie müssten Kernel max Segmentgröße zu erhöhen, leicht zu sein größer als die shared_buffers.

In der Datei /etc/sysctl.conf den Parameter wie unten gezeigt einstellen. Es wird wirksam, wenn postgresql Neustarts

kernel.shmmax=100663296 

Referenzen

How to increase max connections in postgres

Postgres Max Connections And Shared Buffers

Tuning Your PostgreSQL Server

(Die folgende Zeile den Kernel max 96Mb macht)
Verwandte Themen