30 Stimmen

Wie gut ist Oracle Universal Connection Pool (UCP)

Hat jemand Erfahrung mit der Verwendung von Oracle UCP unter echter Produktionslast? Verarbeitet es Datenbank-Reconnects gut? Gibt es Probleme mit Multithreading? Hat es jemand mit C3P0 oder Apache DBCP verglichen?

0 Stimmen

0 Stimmen

Es fällt mir schwer zu glauben, dass die Software von Oracle nicht in der Lage wäre, eine große Last zu bewältigen und Probleme zu haben. Wenn dies der Fall wäre, würden sie einfach kaufen, was sie brauchen, um die Arbeit zu erledigen. Sie können sich die schlechte Presse nicht leisten, die das mit sich bringen würde, und auch nicht die unzufriedenen Kunden.

36voto

MRalwasser Punkte 14931

Ich habe UCP 11.2.0.1 bewertet. als Ersatz für unseren alten Verbindungspool und ich kann es nicht empfehlen :

  • es unterstützt jdk 6 nicht vollständig / ojdbc6.jar. Zum Beispiel funktioniert die Verwendung von Statement Caching und jmx-Support nicht mit Java 6 und löst Ausnahmen aus.
  • kein interner Anweisungs-Cache - stützt er sich auf den Anweisungs-Cache des JDBC-Treibers ( setPoolable() )
  • Ich habe beide Probleme bei Oracle eingereicht, sie haben es bestätigt und werden es wahrscheinlich beheben, wenn Oracle 12.0 veröffentlicht wird. Aber auch das ist nicht sicher.
  • Zu wenige Veröffentlichungen (2 Veröffentlichungen in 3 Jahren), zu wenig Unterstützung durch die Gemeinschaft.
  • Nicht Open-Source
  • Kaum erweiterbar. Nur ein paar Rückrufe mit einem schrecklichen Interface-Design.
    Beispiel: Sie möchten benachrichtigt werden, wenn eine Verbindung ihre TTL überschreitet? Bereiten Sie sich auf eine Wrapper-DataSource und eine massenhafte Nutzung der internen/proprietären UCP-APIs vor. Die offizielle Dokumentation (letzte Aktualisierung: 2008) sagt nichts darüber aus, wie dies zu erreichen ist.
  • Fettes Design (fast ein 0,5 MB jar) - viele Klassen mit ähnlichen Namen/Funktionen (z.B. gibt es eine PoolDataSource und eine ConnectionPool - beide sind verwandt, werden aber unterschiedlich aufgerufen und bieten leicht unterschiedliche Funktionen).
  • java.util.logging seulement

UPDATE 1 (April 2014) :
Auch wenn es nicht ganz zum Thema gehört: Als Ergebnis meiner Bewertung habe ich mich für das neue tomcat jdbc-pool - und es funktioniert seit einem Jahr fast perfekt in mehreren Produktionssystemen. Es ist sehr gut konzipiert, wird regelmäßig aktualisiert, ist erweiterbar und das Apache-Tomcat-Team macht eine gute Arbeit bei der Beantwortung von Fragen/Behebung von Problemen .

UPDATE 2 (Juli 2016) :
Ich kann jetzt sehr empfehlen HikariCP die ich derzeit gegenüber allen anderen Verbindungspools bevorzuge.
Die Architektur, der Fokus auf Korrektheit und Leistung ist einfach erstaunlich.

4voto

oluies Punkte 17326

Ich habe UCP in einem System mit ca. 10 Transaktionen pro Sekunde (Mittelwert) und 360 Transaktionen pro Sekunde (Spitzenwert) eingesetzt, und bisher keine Probleme gehabt. (Die Zahl gilt für einen Anwendungsserver mit 8 Servern)

Die größten Vorteile von UCP ergeben sich jedoch, wenn Sie Oracle RAC und die TAF/FAN-Funktionalität, UCP mit Dataguard oder wenn Sie etwas laufen haben außerhalb einen Anwendungsserver.

3voto

Brett Okken Punkte 6059

Ich habe die Leistungs-/Skalierbarkeitsprobleme, die ich bei UCP im Vergleich zum impliziten Verbindungs-Caching beobachtet habe, hier beschrieben: https://stackoverflow.com/a/27512252/676877

2voto

bconneen Punkte 146

Ich habe mehrere Kunden gesehen, die UCP in der Produktion einsetzen. Ich habe keines der Probleme gesehen, über die Sie besorgt sind. Es funktioniert auch unter Last recht gut. Und es kann mit Reconnects umgehen. Die Wiederverbindungsrichtlinie ist konfigurierbar. Es unterstützt auch RAC recht gut.

Der wirkliche Vorteil der Verwendung eines kommerziellen Verbindungspools ist jedoch, dass jemand für alle Probleme, die Sie haben, verantwortlich ist. Sie wären überrascht, wie viele Leute versuchen, ihren eigenen Verbindungspool zu entwickeln und zu pflegen.

2voto

TomWolk Punkte 908

Ich habe gerade UCP mit unserer auf Eclipse Link basierenden Anwendung ausprobiert und stoße jedes Mal auf ORA-0100: Maximum open cursors exceeded. Ich habe den Parameter MaxStatements auf 10 gesetzt, aber das hatte keine Wirkung. Ich habe den Heap inspiziert, und es gab Hunderte von T4CPreparedStatement-Objekten, aber weniger als 10 verpackte Anweisungen. Also gibt es irgendwo einen riesigen Anweisungs-Cache, den ich nicht kontrollieren kann.

Tomcat jdbc pool funktioniert einwandfrei.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X