Sometime after build 39, performance of JDBC calls from our servlets has severely regressed. Looking at the database logs, the issue is with statement caching: in build 39 and prior, statements were effectively cached and the database spent no time parsing statements. In build 41 and following builds, the database spends a huge amount of time parsing the statements. [No data is available from build 40.]
The database configuration in all cases looks like this:
<jdbc-connection-pool datasource-classname="oracle.jdbc.pool.OracleDataSource" max-pool-size="200" steady-pool-size="200" name="tpcw">
<property name="URL" value="jdbc:oracle:thin:@perf-x4600-1:1521:benchdb"></property>
<property name="Password" value="tpcw"></property>
<property name="User" value="tpcw"></property>
<property name="ImplicitCachingEnabled" value="true"></property>
<property name="MaxStatements" value="200"></property>
So I guess the most likely thing is that the caching properties here are not being passed to the oracle driver correctly, though I guess also some change in the statement wrappers in glassfish could also be affecting this as well. The application use is basic JDBC calls:
con = datasource.getConnection(); // datasource retrieved via JDNI lookup
pstmt = con.prepareStatement(...static final string...);
rs = pstmt.executeQuery();
.. process rs ..
We do not see this change in our JPA-based tests; only with the servlet that uses JDBC.