PgPooling - Sperre bei vielen Anfragen

Hey Leute. Werde hier wohl am Besten aufgehoben sein.

Und zwar gehte es um pgpool2. Ich verwende es, für Connection pooling. Wenn ich 1-2 Anfragen Pro Sekunde ansetze, dann funktioniert alles problemlos.
Sind es mehr, 20/sekunde. Bearbeitet pgpool gar keine Verbindungen mehr. D.h. die Querys liegen tot auf dem pgpool Server ( werden also nicht mehr weitergeleitet).

Gehe mal von aus, dass es eine Art “dead-lock” problem ist. Jemand ne Idee?

wenn es dir NUR um connection pooling geht, dann empfehle ich die selbst einen pool zu implementieren - das ist i.d.r. kein grosser akt.

es gibt sehr wahrscheinlich fuer so ziemlich jede gaengige sprache irgendwelche beispiele und hilfestellungen im netz - oder gar fertige libs.

ich wuerde dennoch empfehlen es selbst zu bauen - denn der pool ist auch ein wichtiger bestandteil des clients und sollte genau dessen anforderungen genuegen - z.B. wann, wie, wozu werden connections benoetigt

ich frage mich immer wie pgpool die system-kosten zur erzeugung von db-connections verringern soll, wenn der client sich statt mit der DB mit pg-pool “unterhalten” soll.

hmm

Wenn du etwas nachdenkst kommst sogar du da drauf das der Pool ständig läuft und ständig die Datenbankverbindung offen hat. Im Gegensatz dazu muss die Datenbank pro ankommendem Request einen neuen Prozess starten und das kostet Performance. Das war einfach, oder?

So, nachdem schon genug Halbwissen beigetragen wurde:

  • Kommen Requests überhaupt an der Datenbank an?
  • Kommen Requests am Pool an und gehen die dort auch hinaus? Ev. mal den Netzwerktraffic mitschneiden.
  • Wie sieht es mit Logging in der Poolsoftware aus, ist da irgendetwas brauchbares?

So, nachdem schonwieder nicht verstanden hast - und schon wieder beleidigen musst:

ich habe nicht den pool ansich in frage gestellt - sondern pg-pool als geeignete loesung, wenn man nur connection-pooling moechte …

soweit ich das beobachten konnte schmeisst postgres uebrigends auch nicht alle prozesse weg, wenn sie idle sind …

pooling gehoert in den client … und dient - wenn mans richtig macht - auch anderen belangen - wie bereits beschrieben

Okay ich greife das problem nochmal auf. So einfach? Naja ich habe folgende Problemstellung. ich habe ca. 50 Rechner, die jeweils 4 Verbindungen zu meinem Server aufbauen. Naja Connection pooling muss dann genau bei der Datenbank entstehen?

Dennoch sollte pgpooling einen solchen Bug nicht haben? Hab das jetzt unter mehreren system ausprobiert, scheint wohl wirklich ein bug zu sein? Omg :frowning:
Jemand eine Idee?

keine ahnung wie der pool arbeitet - er koennte z.B. begrenzt sein - und blockieren wenn keine connections frei sind …

oder etwas andered blockt - z.B. unterschiedliche transaktionen auf den connections - sich gegenseitig .

ich wuerde mal nachforschen WO es genau blockt

Du könntest einen dieser Schritte probieren und hier darüber berichten:

hm. okay werd nochmal ein paar tests machen.

Vorweg.

  • Kommen Requests überhaupt an der Datenbank an?

*Bei pooling mit max. 10 connections funktioniert alles wunderbar.

  • Kommen Requests am Pool an und gehen die dort auch hinaus? Ev. mal den Netzwerktraffic mitschneiden.
  • (siehe 1)
  • Wie sieht es mit Logging in der Poolsoftware aus, ist da irgendetwas brauchbares?
  • werd ich mal nachschauen.

Klar kommen die Requests bei wenigen Verbindungen an. Es wäre aber interessant zu wissen ob man das Problem auf Datenbank- oder auf Poolseite suchen muss. Dafür musst du wissen ob die Verbindungen weitergereicht werden.

Das kannst du gut herausfinden indem du den Traffic auf beiden Seiten des Pools analysierst und zusätzlich schaust wieviele Backends in der Datenbank wirklich geöffnet werden.

OKay super. Danke für den Hinweis! Werd ich gleich mal testen.

ich hatte kuerzlich einen deadlock bei einem close eines java.sql.Statement beobachtet - trat aber nur einmal auf - und nach einem programm-fehler … noch bin ich nicht beunruhigt