Hallo zusammen,
wir haben hier eine Konstellation, welche immer mal wieder zu Poolproblemen führt und zu Fehlern wie “zu viele Verbindungen” führt oder auch banal zu Verzögerungen bei DB-Anfragen.
Wir betreiben einen Webservice, dieser bedient auf einem PSQL-Server viele Datenbanken. Welche Datenbank zu verwenden ist, wird anhand der Mailadresse ermittelt, welche einen Endpunkt anspricht. Dabei geht der Webservice zunächst in eine bestimmte Datenbank, in welcher eine Zuordnungstabelle zwischen E-Mail und Ziel-Datenbank liegt.
Jeder Aufruf eines Endpunktes erzwingt somit die Verbindung zur Zuordnungs-Datenbank und danach die Verbindung zur eigentlichen Ziel-Datenbank. Die Verbindung wird ganz normal geöffnet und danach wieder geschlossen. Im Connectionstring wird das Flag “WithPooling” auf “true” gesetzt. Ich gehe davon aus, dass der Datenbankserver hier in irgendeiner Form die Connections poolt.
Jeder Aufruf eines Endpunktes kommt allerdings immer mit einem neuem Thread daher. Dies verhindert zum Beispiel, dass ich die Connections selber in einem Dictionary o.ä. aufheben kann, den ein threadübergreifendes Verwenden einer Connection geht nicht. Jeder einzelne Aufruf eines Endpunktes - auch zur gleichen Datenbank - erzwingt also eine neue (i.d.R. kurzlebige) Verbindung.
Was kann man nun tun, um die Verbindung zur DB so effektiv wie möglich zu gestalten?
Viele Grüße, Karsten Heimer.