tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tim Lucia" <>
Subject RE: Setting up connection pools "on the fly"...
Date Mon, 23 Jan 2006 12:47:55 GMT
This sequence is typically correct (with the close portions in a finally{}
block.) You could add some timing around each of these statements, and
determine the exact impact.  Think about the relative complexity of each of
these operations

- Get a context - hashed lookup
- Get a datasource - hashed lookup
- Get a connection - DNS resolution, TCP connection, parameter transmission
and negotiation, authentication... (possibly more depending on the driver
and DB)
- Make the statements - query optimization, caching (or cache lookup if a
repeat), execution
- Close resultsets - clean up
- Close statements - clean up
- Close connection - clean up, close TCP connection

Now, replace the two connection operations with hash-type operations - one
to remove it from a pool (list, collection, hash) and one to put it back.
This is where you get the savings.  This leaves the statement execution as
the next largest time consumer, but that is an invariant in this problem.

Empirically, I can tell you I added pooling to an older web app recently and
some 'typical' web requests improved by about 2.5X.  More importantly,
Oracle 8i stopped running out of resources, saving operations from nightly
DB restarts.


-----Original Message-----
From: Warrick Wilson [] 
Sent: Sunday, January 22, 2006 9:24 PM
To: 'Tomcat Users List'
Subject: RE: Setting up connection pools "on the fly"...

> -----Original Message-----
> From: Tim Lucia []
> Sent: Sunday, January 22, 2006 6:21 AM
> To: 'Tomcat Users List'
> Subject: RE: Setting up connection pools "on the fly"...
> The point of connection pooling is to eliminate the overhead
> of setting up and tearing down a (TCP, database, AAA) 
> connection for every database transaction (typically, the web 
> request in a web app.)  This can add 100s or 1000s of 
> milliseconds to every request, and is quite expensive.
> If you can architect your application so that there is a JNDI
> data source for each server (database server, instance, etc.) 
> with its own pool of connections, you can always call 
> setCatalog 
> (
> tml#setCatalog
> (java.lang.String)) on the connection returned from the pool. 
>  One doesn't typically add new database servers "on the fly", 
> and this option would require defining a new JNDI datasource 
> for a new server.  Of course all catalogs processed in this 
> way must be accesible to the user specified in the 
> connnection pool properties.  I would suggest setting the 
> defaultCatalog property as well, so that you are not 
> accidentally connected to the last-used catalog from the 
> previous borrower of the connection.
> Tim

Tim - If you could educate me on an aspect of this, I'd hugely appreciate

What part of the standard set of calls for making a JDBC connection is the
part that sets up the connection?

Normally, all the tutorial stuff shows something like (assuming the Tomcat
JNDI stuff is set up in context.xml):

Get a context
Get a datasource
Get a connection
Make the statements
Close resultsets
Close statements
Close connection

Is there a part of this that takes a lot of time? Part of what I need to do
is handle database calls in a couple of different places (at least in the
current design, which I'm the first to admin is likely not optimal). So that
means figuring out how to get at the database in an effective manner as far
as performance goes. I've seen a number of references to "setting up a
connection takes a long time" - I'm not sure which of the calls is the part
that takes a long time. 



To unsubscribe, e-mail:
For additional commands, e-mail:

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message