2011-09-01 26 views
8

Đây là thỏa thuận:Chèn hàng loạt JDBC đang bị chậm! Ý tôi là, REALLY SLOW?

  1. tôi tạo ra một kết nối conn sử dụng DriverManager
  2. tôi đặt conn.autoCommit(false);
  3. Sau đó, tôi có PreparedStatement pStat = conn.prepareStatement(insert_string_with_parameter);
  4. tôi đặt một vài thông số với pStat.set ... sau đó tôi thêm lô hàng có pStat.addBatch();
  5. Mỗi 10000 hàng (tôi gọi addBatch() 10000 lần), tôi gọi pStat.executeBatch();
  6. Không chắc nếu cần thiết nhưng tôi cũng gọi pStat.clearBatch() ngay sau khi

Ngay cả khi tất cả các bên trên âm thanh tốt với tôi, đây là CHẬM !!!.

Tôi chỉ có trung bình 35 bản ghi (chỉ có tổng cộng 8 cột, chỉ một khóa chính tăng tự động kỹ thuật và một số không ràng buộc null) mỗi giây. Tôi tính rằng sẽ mất một tuần để chèn tất cả các hàng 20M của tôi ...

Tôi có làm gì sai không?

Tôi nên thử thêm bao nhiêu hàng vào mỗi chu kỳ lô? Có quá 10000 không?

+0

Tôi cũng đã thử với 1000 hàng tại thời điểm đó nhưng tôi không thấy bất kỳ cải thiện đáng kể nào ... – Gevorg

+6

Vui lòng hiển thị SQL, lược đồ và chỉ ra các chỉ mục và trình kích hoạt có trên (các) bảng liên quan. – Bohemian

+0

không có chỉ mục và không có trình kích hoạt. Đó là bảng đơn giản nhất từ ​​trước đến nay ... – Gevorg

Trả lời

1

Nếu bạn tình cờ sử dụng MySQL với trình điều khiển JDBC xung quanh phiên bản 5.1.7, bạn có thể bị ảnh hưởng bởi a bug that slows down batch inserts. Việc cập nhật lên 5.1.10 or later sẽ giải quyết vấn đề này.

Các vấn đề liên quan