dbcp - mysql connection pool java example
Qué tan bueno es Oracle Universal Connection Pool(UCP) (6)
¿Alguien tiene experiencia con el uso de Oracle UCP bajo una carga de producción real? ¿Maneja la base de datos vuelve a conectar bien? ¿Hay problemas con múltiples subprocesos? ¿Alguien lo ha comparado con C3P0 o Apache DBCP?
Acabo de probar UCP con nuestra aplicación basada en Eclipse Link y me encuentro con ORA-0100: Se han superado los cursores abiertos máximos cada vez. He establecido el parámetro MaxStatements en 10, pero eso no tuvo ningún efecto. He inspeccionado el Heap y había cientos de objetos T4CPreparedStatement vivos pero menos de 10 declaraciones envueltas. Entonces, hay un enorme caché de afirmaciones en algún lugar que no puedo controlar.
Tomcat jdbc pool funciona como un encanto.
He descrito los problemas de rendimiento / escalabilidad que he observado con UCP en comparación con el almacenamiento en caché de conexiones implícitas aquí: https://.com/a/27512252/676877
He usado UCP en un sistema con alrededor de 10 transacciones por segundo (media) y 360 transacciones por segundo pico, y todavía no hay problemas. (El número es por servidor de aplicaciones con 8 servidores)
Sin embargo, los beneficios principales que obtiene de UCP es cuando está utilizando Oracle RAC y la funcionalidad TAF / FAN, UCP con Dataguard o si está ejecutando algo fuera de un servidor de aplicaciones.
He visto varios clientes que usan UCP en producción. No he visto ninguno de los problemas que le preocupan. Se desempeña bastante bien bajo carga. Y puede manejar reconectaciones. La política de reconexión es configurable. También es compatible con RAC bastante bien.
Pero la ventaja real de usar un grupo de conexión comercial es que alguien es responsable de cualquier problema que tenga. Se sorprendería de cuántas personas intentan desarrollar y mantener su propio grupo de conexiones.
al usar la agrupación de conexiones (IBM RAD) para Oracle, obtengo resultados más rápidos cuando comparo con el concepto de programación normal. En las propiedades de agrupación de conexiones, por defecto el número máximo de conexiones es 10, y el tiempo de espera ideal es 180 segundos .
aquí podemos configurar el máximo de acceso de los usuarios de usuarios a la vez ....
Evalué UCP 11.2.0.1 como reemplazo de nuestro grupo de conexiones heredado y no puedo recomendarlo :
- no es totalmente compatible con jdk 6 / ojdbc6.jar. Por ejemplo, el uso del almacenamiento en caché de sentencias y el soporte de jmx no funciona con java 6 y arroja excepciones.
- sin caché de sentencias interna : se basa en el caché de sentencias del controlador jdbc (
setPoolable()
) - Envié ambos problemas al oráculo, lo confirmaron y probablemente lo arreglarán cuando se publique Oracle 12.0. Pero incluso eso no es seguro.
- Muy pocos lanzamientos (2 lanzamientos en 3 años), también menos apoyo de la comunidad.
- No de código abierto
- Difícilmente extensible. Solo unas pocas devoluciones de llamada con un diseño de interfaz horrible.
Ejemplo: ¿Desea recibir una notificación cuando una conexión excede su TTL? Prepárese para un contenedor DataSource y un uso masivo de API UCP internas / propietarias. La documentación oficial (última actualización: 2008) no dice nada sobre cómo lograr esto. - Diseño grueso (casi un contenedor de 0,5 MB): muchas clases con nombres / funciones similares (por ejemplo, hay un
PoolDataSource
y unConnectionPool
, ambos están relacionados pero se invocan de manera diferente y ofrecen una funcionalidad ligeramente diferente. - solo java.util.logging
ACTUALIZACIÓN 1 (abril de 2014) :
Aunque ligeramente fuera de tema: como resultado de mi evaluación, decidí ir con el nuevo tomcat jdbc-pool , y funciona casi perfectamente desde hace un año en varios sistemas de producción. Está muy bien diseñado, se actualiza regularmente, es extensible y el equipo de apache tomcat hace un buen trabajo respondiendo preguntas / arreglando problemas .
ACTUALIZACIÓN 2 (julio de 2016) :
Ahora puedo recomendar HikariCP que actualmente prefiero a todos los demás grupos de conexiones.
Su arquitectura, se centra en la corrección y el rendimiento es simplemente increíble.