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?
Antworten
Zu viele Anzeigen?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 eineConnectionPool
- 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.
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.
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
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.
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.
- See previous answers
- Weitere Antworten anzeigen
0 Stimmen
Siehe stackoverflow.com/questions/1427890/
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.