Tôi đang chạy truy vấn đối với Oracle 10g với JDBC (sử dụng trình điều khiển mới nhất và UCP làm DataSource) để truy xuất CLOB (ký tự đại diện 20k). Tuy nhiên, hiệu suất có vẻ khá tệ: việc thu hồi hàng loạt 100 LOB mất trung bình 4 s. Các hoạt động cũng không phải là I/O cũng như CPU và mạng lưới không bị ràng buộc đánh giá từ các quan sát của tôi.Hiệu suất CLOB Oracle
thiết lập thử nghiệm của tôi trông như thế này:
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");
}
});
}
tôi đã thử nghiệm với lấy kích cỡ nhưng không có kết quả. Tôi có làm điều gì sai? Có cách nào để tăng tốc độ truy xuất CLOB khi sử dụng JDBC không?
Bạn xác định nó không bị ràng buộc mạng như thế nào? Bạn đang nói về việc thiết lập một kết nối JDBC mới (đắt tiền), 2Mb giá trị dữ liệu để đọc từ đĩa, gửi nó qua mạng và phí trên của truy vấn (không được chỉ định). Tôi không biết nếu 4s là tất cả những gì xấu tùy thuộc vào cách bố trí mạng của bạn và thiết lập cơ sở dữ liệu. – Gandalf
Làm rõ: Tôi đo bằng * đơn vị * 100 vì vậy hình phạt ban đầu của kết nối không được tính. Tổng thông lượng mạng ở dưới 2Mbit/s vì vậy tôi cho rằng nó không phải là mạng bị ràng buộc. – yawn
Truy vấn thực tế mất bao lâu? – Gandalf