我正在使用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