Datenbankverbindungen nach Inaktivität schließen

9

Ich habe eine Mule-Anwendung, die eine Verbindung zu einer Oracle-Datenbank herstellt. Die Anwendung ist eine SOAP API, die das Ausführen von SQL Stored Procedures ermöglicht. Mein Connector ist für die Verwendung von Verbindungspooling eingerichtet, und ich habe die Verbindungen selbst überwacht. Ich habe eine maximale Poolgröße von 20 und wenn ich Aufrufe an die Datenbank mache, kann ich sie öffnen sehen (netstat -ntl | grep PORTNUMBER).

%Vor%

Wenn die Anrufe abgeschlossen sind, erwarte ich, dass die Verbindungen nach einer gewissen Zeit geschlossen werden. Das passiert nicht. Ich habe bemerkt, dass die Verbindung, als die Anwendung auf einem Server ausgeführt wurde, noch im Juli offen war (das ist ein paar Monate zurück).

Der einzige Weg, den ich bisher gefunden habe, besteht darin, die Verbindungen nach ein paar Sekunden zu schließen, indem XA-Transaktionen aktiviert und das Verbindungstimeout gesetzt werden. Dies beeinträchtigt jedoch die Leistung der Anwendung und verursacht unnötigen Overhead.

Wie würde ich ein solches Zeitlimit hinzufügen, ohne XA-Verbindungen zu verwenden? Ich möchte, dass meine Datenbankverbindungen nach 20 Sekunden Inaktivität geschlossen werden.

Danke

Bearbeiten: Generischer Datenbankkonnektor wird verwendet - Mule-Version 3.8.0 Wir haben eine maximale Anzahl an Verbindungen, die für die Datenbank zulässig sind. Wir haben mehrere Instanzen dieses Flusses ausgeführt. Dies bedeutet, dass Verbindungen von einer der Instanzen reserviert werden, wodurch die anderen Instanzen keine neuen Verbindungen erhalten können.

Das spezielle Problem, das wir hatten, war, dass eine Instanz immer noch 120 Verbindungen reserviert hatte, obwohl sie das letzte Mal vor Wochen gelaufen war. Wenn die zweite Instanz mehr Verbindungen angefordert hat, konnte sie nur 30 erhalten, da das Maximum auf der Datenbankseite 150 ist.

    
DenCowboy 22.09.2016, 06:13
quelle

2 Antworten

0

Sie können Oracle Transparent Connection Caching ausprobieren, wenn Sie kein Glück haben mit Mule.

Ein paar Fragen, um den Fall besser zu verstehen:

  1. Welche Art von Connector verwenden Sie (jdbc / database) und welche Version von Mule ist das?
  2. warum interessiert es dich, dass die Verbindung danach offen ist? Beobachten Sie einige andere Symptome, mit denen Sie nicht zufrieden sind?
Ivan 27.09.2016 09:26
quelle
0

Datenbankverbindungen über JDBC sind so konzipiert, dass sie offen bleiben, um wiederverwendet zu werden. Im Allgemeinen haben die meisten Datenbanktechnologien, einschließlich der NoSQL-Datenbanken der nächsten Generation, teuere Kosten für den Start und das Herunterfahren. Datenbankverbindungen sollten beim Start der Anwendung hergestellt und beim Herunterfahren der Anwendung ordnungsgemäß geschlossen werden. Sie sollten Verbindungen nach jeder Verwendung nicht schließen.

Oracle bietet einen Verbindungspool mit der Bezeichnung UCP . UCP bietet Optionen zur Steuerung von veralteten Verbindungen , die eine maximale Wiederverwendungszeit festlegen und inaktive Verbindungszeitüberschreitung unter anderen Optionen.

Dies kann nützlich sein, um Ressourcen an die Anwendung zurückzugeben und nach beschädigten Verbindungen zu suchen. Unabhängig davon sollten Verbindungen mehrmals vor dem Schließen wiederverwendet werden.

    
Scott Boring 04.10.2016 03:05
quelle