我正在使用JDBC(使用最新的驱动程序和UCP作为DataSource)对Oracle 10g执行查询以检索CLOB(平均20k字符)。但是性能似乎相当糟糕:100个LOB的批量检索平均需要4秒。从我的观察结果来看,该操作既不是I/O也不是CPU,也不是网络界限。Oracle CLOB性能
我的测试设置是这样的:
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检索?
你是怎么确定它没有网络绑定的?您正在讨论设置新的JDBC连接(价格昂贵),2Mb的数据从磁盘读取,通过网络发送以及查询开销(未指定)。根据您的网络布局和数据库设置,我不知道4s是不是很糟糕。 – Gandalf 2009-10-06 17:38:13
澄清:我测量的*单位*为100,因此连接的初始处罚不计算在内。总的网络吞吐量保持在2Mbit/s以下,所以我认为它不受网络限制。 – yawn 2009-10-06 19:12:03
实际查询需要多长时间? – Gandalf 2009-10-06 20:35:52