determine which connections to hold in pool by relative value
-------------------------------------------------------------
Key: DBCP-368
URL: https://issues.apache.org/jira/browse/DBCP-368
Project: Commons Dbcp
Issue Type: New Feature
Reporter: Philip Williams
Situation: a Firebird-Classic database (each connection has independent
metadata cache), in a metadata-heavy environment; many "quick" actions will
never force the database server to load full metadata, but a few will, in our
case resulting in 200MB of metadata cache in memory (takes about 3 seconds to
load, visible latency to the user); any connection that has done this is "more
valuable" to us, and we'd prefer to keep those connections in the pool, and
remove idle connections which haven't incurred this cost yet and are relatively
cheap to recreate later if our load increases. Doing this is preferable to
forcing ALL connections to load metadata at start, as this means the pool will
always have a startup cost (in time), and the server will likely use more
memory than really necessary.
Proposal: add new configuration parameter; if set, run the SQL string and get
back a single-column, single-row result-set containing an arbitrary "value" as
determined by the connection; prefer to close the lowest(?)-value connections
first, to get down to the configured minIdle. Would require querying each open
connection, when the pool is over-full, to determine which ones are most
valuable. If not set, use current algorithm (based on age?).
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira