运行使用C3P0支持的连接池使用SQL Server JDBC驱动程序(版本4.0)访问SQL Server的应用程序时,我们遇到一个奇怪的错误,该错误大约每周发生一次(没有可观察的模式或时间)。
准备好的语句可以很好地执行SQL查询,但是每周执行一次左右,它们将失败,并带有以下异常:
com.microsoft.sqlserver.jdbc.SQLServerException:找不到带有句柄2的准备好的语句。
在com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
在com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515)
在com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:404)
在com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement $ PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:350)
在com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
在com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)
在com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180)
在com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155)
在com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.execute(SQLServerPreparedStatement.java:332)
在com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.execute(NewProxyPreparedStatement.java:989)
用于SQL Server的Microsoft JDBC驱动程序(4.0)的版本不支持设置准备好的语句缓存(或者至少这是我阅读jdbc driver wiki的理解)。
C3P0配置有maxStatementsPerConnection = 50
和maxStatements = 0
,最大连接数设置为100。
我应该考虑什么才能找出问题所在?