PgPooling - Sperre bei vielen Anfragen

Alle Fragen und Probleme zu den externen Schnittstellen wie ODBC, JDBC, ...
CenText
Erfahrener Benutzer
Beiträge: 222
Registriert: So 29. Jul 2007, 13:41

PgPooling - Sperre bei vielen Anfragen

Beitrag von CenText » Mi 10. Sep 2008, 09:13

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?

symbiont
Erfahrener Benutzer
Beiträge: 1328
Registriert: Mo 17. Mär 2008, 11:45
Wohnort: NULL

Beitrag von symbiont » Mi 10. Sep 2008, 10:18

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

ads
Erfahrener Benutzer
Beiträge: 4148
Registriert: Mi 8. Feb 2006, 10:58
Wohnort: MD
Kontaktdaten:

Beitrag von ads » Mi 10. Sep 2008, 13:30

symbiont hat geschrieben: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.

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?
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören Bild

Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

PostgreSQL Service & Support

symbiont
Erfahrener Benutzer
Beiträge: 1328
Registriert: Mo 17. Mär 2008, 11:45
Wohnort: NULL

Beitrag von symbiont » Mi 10. Sep 2008, 13:45

ads hat geschrieben:Wenn du etwas nachdenkst kommst


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

CenText
Erfahrener Benutzer
Beiträge: 222
Registriert: So 29. Jul 2007, 13:41

Beitrag von CenText » Sa 20. Sep 2008, 07:56

symbiont hat geschrieben: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


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 :(
Jemand eine Idee?

symbiont
Erfahrener Benutzer
Beiträge: 1328
Registriert: Mo 17. Mär 2008, 11:45
Wohnort: NULL

Beitrag von symbiont » Sa 20. Sep 2008, 09:58

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

ads
Erfahrener Benutzer
Beiträge: 4148
Registriert: Mi 8. Feb 2006, 10:58
Wohnort: MD
Kontaktdaten:

Beitrag von ads » Sa 20. Sep 2008, 11:34

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

ads hat geschrieben:- 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?
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören Bild

Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

PostgreSQL Service & Support

CenText
Erfahrener Benutzer
Beiträge: 222
Registriert: So 29. Jul 2007, 13:41

Beitrag von CenText » Sa 20. Sep 2008, 12:20

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.

ads
Erfahrener Benutzer
Beiträge: 4148
Registriert: Mi 8. Feb 2006, 10:58
Wohnort: MD
Kontaktdaten:

Beitrag von ads » Sa 20. Sep 2008, 12:44

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.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören Bild

Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

PostgreSQL Service & Support

CenText
Erfahrener Benutzer
Beiträge: 222
Registriert: So 29. Jul 2007, 13:41

Beitrag von CenText » Sa 20. Sep 2008, 14:06

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

Antworten