maxOpenPreparedStatements needs a better default or at least better
documentation.
----------------------------------------------------------------------------------
Key: DBCP-301
URL: https://issues.apache.org/jira/browse/DBCP-301
Project: Commons Dbcp
Issue Type: Improvement
Affects Versions: 1.2.2
Environment: Tomcat 6.0.20, Sun Java 1.6.0_16
Reporter: Bill Davidson
If you set poolPreparedStatements="true", it is important to set the
maxOpenPreparedStatements to something reasonable. The default of unlimited is
very likely to cause many applications to run out of cursors, since pooled
PreparedStatement objects are not actually closed, which means they keep
cursors open. I ran out of cursors because of this using Oracle.
I realize that setting the right default is problematic, and the best choice
almost certainly varies with which DBMS is being used, how much memory it has
available and the nature of the application. Perhaps better warnings in the
documentation would make more sense.
The current configuration documentation for these options contains only this
warning:
"NOTE - Make sure your connection has some resources left for the other
statements."
That really doesn't make it clear that poolPreparedStatements is going to eat
up all of your database cursors after a while if you keep connections open for
very long (as you might if you have a very active system).
It would be nice to have some sort of warning there letting people know that
using poolPreparedStatements but not setting an appropriate
maxOpenPreparedStatements has a high probability of causing problems on busy
systems. Maybe something like this:
NOTE - When setting poolPreparedStatements="true" it is highly recommended that
you also set maxOpenPreparedStatements to a value appropriate to your DBMS and
application. Pooled PreparedStatement objects are not closed, and so can keep
to many database cursors open on busy systems which can consume all of your
cursor resources. The optimal value of maxOpenPreparedStatements will depend
upon your DBMS, the application, and your hardware resources but it must be set
to something less than the maximum number of open cursors allowed on a
Connection by your DBMS.
I'm sure that it could probably be worded better. I'm just trying to get the
idea across.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.