返回页首
语句缓存 为提高性能,WebLogic Server 提供了一种功能,让您可以在使用连接池时将预处理语句和可调用语句载入缓存。当 WebLogic Server 将预处理语句或可调用语句载入缓存时,在许多情况下,DBMS 将为每个打开的语句都保留游标。因此,语句缓存可能是“超出最多允许打开的游标数”问题的成因。“语句缓存大小”属性决定在每个连接池实例中为每个连接缓存的预处理和可调用语句的总数。如果缓存的语句过多,可能会导致超过数据库服务器上打开游标数的上限。 请注意,各版本 WebLogic Server 的缺省语句缓存大小是有差异的。示例:
要确定“超出最多允许打开的游标数”问题是否与语句缓存有关,可以通过将语句缓存大小设置为 0 将此功能关闭或减少缓存大小,再确认是否仍会出现错误。如果在减少缓存大小后问题没有发生,则说明连接池原有的语句缓存过大或 DBMS 中打开游标数的上限过低。可能需要考虑调整其中的一个值。如果发现连接上打开的游标数持续增加,但在将语句缓存大小设置为 0 后没有出现这种现象,则可能说明存在游标泄漏问题。这可能是由使用的 JDBC 驱动程序所致,也可能是 WebLogic Server 本身的一个错误。请尝试使用其它 JDBC 驱动程序。如果使用其它 JDBC 驱动程序后仍发生同样的问题,请将此问题报告给 BEA,这样支持工程师可以对问题做进一步探查,以确定该问题是否为 WebLogic Server 自身的一个错误。 返回页首 数据库驱动程序 “超出最多允许打开的游标数”问题的另一个可能成因是 JDBC 驱动程序有问题。为分清问题是驱动程序问题还是 WebLogic 连接池问题,如果有可重现的测试案例,可以尝试执行以下步骤。 1. 直接从驱动程序获取连接。 在测试案例中,绕过 WebLogic 连接池直接从驱动程序获取 JDBC 连接。但请不要关闭连接,只需让它们以数组或某种其它结构形式保持打开状态,然后确认游标泄漏是否仍然存在。不关闭连接是因为要模拟使用连接池时的行为。使用连接池时,connection.close() 并未真正地关闭物理连接,而是将连接返回到池中。 2. 尝试使用其它 JDBC 驱动程序。 可以尝试使用其它供应商的 JDBC 驱动程序或升级版的驱动程序,然后确认问题是否仍然存在。可以使用元数据来验证所使用的驱动程序是否正确。示例代码与下面的类似: |