los mejores parametros org.apache.commons.dbcp.BasicDataSource

Hola Comunidad:
Estoy con spring 2.x y estoy usando org.apache.commons.dbcp.BasicDataSource como datasource , y esta es la duda
cuales son los mejores parametros para utilizar bien el pool

maxActiv u otros. algún plantilla de quien haya tenido bien configurada y con éxito su aplicación

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de JaimeItlzc

maxActive

maxActive() solo mantiene el numero maximo de conexiones activas que se le asigna a un grupo al mismo tiempo sin negativa de limite.
a que te refieres con los mejores parametros para el pool?

Saludos.

Imagen de ezamudio

depende

No hay una combinacion de parametros que sea optima para todos los casos. Por eso no trae defaults el BasicDataSource. Y por eso puedes afinar tantos parametros. Depende mucho de tu aplicacion. Es lo bueno de DBCP, puedes hacerle "fine tuning" ya en produccion.

maxActive es el limite de conexiones que puede haber activas. Si defines 10 por ejemplo, el pool a lo mucho puede hacer entregado 10 conexiones a quien se lo pida. Si alguien pide otra conexion, el pool espera a que una de esas 10 regrese para entregarla al que esta esperando. Ese tiempo de espera tambien es configurable, maxWait.

Cuando hay inactividad, puedes definir cuanto tiempo puede estar una conexion inactiva, para que mejor ya se deseche, o que nunca se deseche pero para mantenerla viva se ejecute algun query para generar trafico en esa conexion. Puedes definir cuantas conexiones inactivas quieres mantener como minimo, siempre disponibles. Puedes definir cuantas conexiones crear en el momento que se crea el pool. Puedes definir que query correr cuando se crea una conexion, antes de prestarla, antes de devolverla al pool... pero no hay una combinacion magica de todos estos parametros que sea la optima. Como ya dije, depende mucho de tu aplicacion. Lo que te puede servir es analizar lo que haces con las conexiones. Se usan mas para guardar datos, o para consultarlos? son consultas de muchos datos, que toman largo tiempo, o son consultas muy puntuales que devuelven pocos registros y se resuelven rapido? haces muchas transacciones laboriosas que usan la misma conexion para varias operaciones secuenciales y que eso se pueda tardar algo de tiempo?

Si tus componentes usan una conexion por largo tiempo, entonces entre mas usuarios tengas, necesitas mas conexiones. Si no quieres tener al usuario esperando y ya no puedes despachar mas conexiones, ponle al pool tiempo de espera corto (si no puede obtener una conexion ni crearla y pasa ese tiempo corto, se arroja excepcion y le presentas error al usuario de que el sistema esta saturado y que intente mas tarde). Si tus componentes usan las conexiones por un tiempo muy corto y las devuelven luego luego, puedes atender muchisimas peticiones con unas pocas conexiones.

Yo tengo un sistema donde de plano durante un tiempo puse un componente a monitorear el BasicDataSource, escribiendo a un log el numero de conexiones total, activas, inactivas. Con eso pude configurar mejor el pool; de hecho tenia unos limites muy altos de conexiones y me di cuenta que lo podia bajar, nunca se generaban tantas. Y por otra parte si tus conexiones todo el tiempo se sacan del pool por mucho tiempo puede ser sintoma de problemas de performance en tu RDBMS y necesitas empezar a revisar queries, indices, etc en el RDBMS.

Imagen de JaimeItlzc

validationQuery

para definir cuanto tiempo se puede tener una conexion inactiva cierto tiempo puede implementarse validationQueryTimeout() con una validacion de error? y sobre definir que query correr cuando se crea una conexion, antes de presentarla , antes de devolverla al pool podria utilizar validationQuery()?

Saludos.

Imagen de hendaviher

ayuda

buen dia, tengo poco conocimiento sobre la configuracion de basicdatasource, podrian ayudarme, mi aplicacion, mas que todo realiza muchas consultas puntuales no son tan grandes, por un tiempo muy corto y se resuelven rapido.
que configuracion debo utilizar ?
como devuelvo las conexion luego usarlas, les agradezco.