Насколько хорош Oracle Universal Connection Pool (UCP) - PullRequest
26 голосов
/ 11 марта 2010

Кто-нибудь имеет опыт использования Oracle UCP под реальной производственной нагрузкой?Хорошо ли справляется с переподключением базы данных?Есть ли проблемы с многопоточностью?Кто-нибудь сравнивал это с C3P0 или Apache DBCP?

Ответы [ 6 ]

32 голосов
/ 15 декабря 2010

Я оценил UCP 11.2.0.1 в качестве замены для нашего прежнего пула соединений , и я не могу рекомендовать его :

  • it не полностью поддерживает jdk 6 / ojdbc6.jar. Например, использование кэширования операторов и поддержки jmx не работает с Java 6 и выдает исключения.
  • нет внутреннего кэша операторов - он опирается на кэш операторов драйвера jdbc (setPoolable())
  • Я отправил обе проблемы в oracle, они подтвердили это и, вероятно, исправят, когда выйдет oracle 12.0. Но даже это не точно.
  • Слишком мало релизов (2 релиза за 3 года), слишком мало поддержки сообщества.
  • Не с открытым исходным кодом
  • Едва расширяемый. Только несколько обратных вызовов с ужасным дизайном интерфейса.
    Пример: Вы хотите получать уведомление, когда Соединение превышает его TTL? Подготовьтесь к обёртке DataSource и массовому использованию внутренних / проприетарных UCP API. В официальной документации (последнее обновление: 2008) ничего не говорится о том, как этого добиться.
  • Толстый дизайн (почти банка 0,5 МБ) - многие классы с похожими именами / функциями (например, есть PoolDataSource и ConnectionPool - оба связаны, но вызываются по-разному и дают немного разная функциональность.)
  • java.util.logging только


ОБНОВЛЕНИЕ 1 (апрель 2014 г.) :
Хотя и немного не по теме: в результате моей оценки я решил перейти на новый tomcat jdbc-pool - и он почти год отлично работает в нескольких производственных системах. Он очень хорошо спроектирован, регулярно обновляется, расширяется, и команда Apache Tomcat делает хорошую работу, отвечая на вопросы / исправляя проблемы .

ОБНОВЛЕНИЕ 2 (июль 2016 г.) :
Теперь я настоятельно рекомендую HikariCP , который в настоящее время я предпочитаю всем остальным пулам соединений.
Его архитектура, фокус на правильности и производительности просто потрясающая.

3 голосов
/ 16 декабря 2014

Я описал проблемы производительности / масштабируемости, которые я наблюдал при использовании UCP, по сравнению с неявным кэшированием соединений: https://stackoverflow.com/a/27512252/676877

3 голосов
/ 09 мая 2010

Я использовал UCP в системе с 10 транзакциями в секунду (в среднем) и 360 транзакциями в секунду, и никаких проблем пока нет. (Количество на сервер приложений с 8 серверами)

Однако основные преимущества, которые вы получаете от UCP, - это использование Oracle RAC и функциональности TAF / FAN, UCP с Dataguard или если вы запускаете что-то вне приложения.

2 голосов
/ 27 апреля 2015

Я только что попробовал UCP с нашим приложением на основе Eclipse Link, и я столкнулся с ORA-0100: максимальное превышение открытых курсоров каждый раз. Я установил для параметра MaxStatements значение 10, но это не имело никакого эффекта. Я проверил кучу, и там были живы сотни объектов T4CPreparedStatement, но менее 10 завернутых операторов. Так что где-то есть огромный кэш операторов, которым я не могу управлять.

Tomcat jdbc pool работает как шарм.

2 голосов
/ 04 мая 2010

Я видел нескольких клиентов, использующих UCP в производстве. Я не видел ни одной из проблем, которые вас беспокоят. Хорошо работает под нагрузкой. И может справиться переподключения. Политика переподключения настраивается. Он также достаточно хорошо поддерживает RAC.

Но реальная польза от использования коммерческого пула соединений заключается в том, что кто-то отвечает за любые ваши проблемы. Вы будете удивлены, сколько людей пытаются разработать и поддерживать свой собственный пул соединений.

0 голосов
/ 16 марта 2010

Используя пул соединений (IBM RAD) для оракула, я получаю более быстрые результаты. По сравнению с обычной концепцией программирования. В свойствах пула соединений по умолчанию максимальное число соединений равно 10, а идеальное время 180 сек.

здесь мы можем настроить максимальное количество пользователей, к которым пользователи имеют доступ одновременно ...

...