Trong JDBC, setFetchSize(int)
phương pháp này rất quan trọng đối với hiệu suất và quản lý bộ nhớ trong JVM vì nó kiểm soát số lượng cuộc gọi mạng từ JVM đến cơ sở dữ liệu và tương ứng với lượng RAM được sử dụng để xử lý ResultSet.
Vốn dĩ nếu setFetchSize (10) đang được gọi và trình điều khiển đang bỏ qua nó, có lẽ chỉ có hai tùy chọn:
- Hãy thử một trình điều khiển JDBC khác phù hợp với gợi ý về kích thước tìm nạp.
- Xem xét các thuộc tính dành riêng cho trình điều khiển trên Kết nối (URL và / hoặc bản đồ thuộc tính khi tạo bản sao Kết nối).
RESULT-SET là số hàng được sắp xếp trên DB để phản hồi lại truy vấn. ROW-SET là phần của các hàng được tìm nạp từ RESULT-SET cho mỗi lần gọi từ JVM đến DB. cuộc gọi và kết quả RAM cần thiết để xử lý phụ thuộc vào cài đặt kích thước tìm nạp.
Vì vậy, nếu RESULT-SET có 100 hàng và kích thước tìm nạp là 10, sẽ có 10 lệnh gọi mạng để truy xuất tất cả dữ liệu, sử dụng khoảng 10 * {row-content-size} RAM tại bất kỳ thời điểm nào.
Kích thước tìm nạp mặc định là 10, khá nhỏ. P>
Điều gì xảy ra bên dưới ResultSet.next()
là nó không thực sự tìm nạp từng hàng một từ BỘ KẾT QUẢ. Nó tìm nạp từ ROW-SET (cục bộ) và tìm nạp ROW-SET tiếp theo (ẩn) từ máy chủ khi nó cạn kiệt trên máy khách cục bộ.
Tất cả điều này phụ thuộc vào trình điều khiển vì cài đặt chỉ là 'gợi ý' nhưng trên thực tế, tôi nhận thấy đây là cách nó hoạt động đối với nhiều trình điều khiển và cơ sở dữ liệu (đã được xác minh trong nhiều phiên bản của Oracle, DB2 và MySQL).