我正在使用 JDBC(使用最新的驱动程序和 UCP 作为数据源)对 Oracle 10g 运行查询,以检索 CLOB(平均 20k 个字符)。但是性能似乎很差:100 个 LOB 的批量检索平均需要 4 秒。从我的观察来看,该操作既不是 I/O,也不是 CPU,也不是网络绑定。
我的测试设置如下所示:
PoolDataSource dataSource = PoolDataSourceFactory.getPoolDataSource();
dataSource.setConnectionFactoryClassName("...");
dataSource.setConnectionPoolName("...");
dataSource.setURL("...");
dataSource.setUser("...");
dataSource.setPassword("...");
dataSource.setConnectionProperty("defaultRowPrefetch", "1000");
dataSource.setConnectionProperty("defaultLobPrefetchSize", "500000");
final LobHandler handler = new OracleLobHandler();
JdbcTemplate j = new JdbcTemplate(dataSource);
j.query("SELECT bigClob FROM ...",
new RowCallbackHandler() {
public void processRow(final ResultSet rs) throws SQLException {
String result = handler.getClobAsString(rs, "bigClob");
}
});
}
我尝试了获取大小,但无济于事。难道我做错了什么?使用 JDBC 时有没有办法加快 CLOB 检索?