CLOB(平均20k文字)を取得するために、JDBCを使用してOracle 10gに対してクエリを実行しています(最新のドライバーとUCPをデータソースとして使用)。ただし、パフォーマンスはかなり悪いようです。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の取得を高速化する方法はありますか?