Tôi thấy một số khác biệt hiệu suất đáng kể giữa OracleBulkCopy (ODP.NET) và SQL * Loader khi máy chủ Oracle nằm trên một máy khác.OracleBulkCopy vs SQL * Hiệu suất bộ tải
Tôi có một bảng rất cơ bản trong Oracle với ba cột (một BINARY_FLOAT, hai SỐ (18,0)). Không có khóa chính, chỉ mục, trình kích hoạt, vv Nó được sử dụng như một bảng dàn để lấy dữ liệu hàng loạt vào DB.
Trình tải SQL * mất khoảng 27 giây để tải 4,5 triệu hàng vào bảng.
OracleBulkCopy mất khoảng 10 phút để tải chỉ 1 triệu hàng.
OracleBulkCopy, theo tài liệu, * "... sử dụng phương pháp tải đường dẫn trực tiếp, tương tự như, nhưng không giống như Oracle SQL * Loader." * Nó có thể không ở trên đó với Trình tải SQL * về hiệu suất, nhưng sự khác biệt này là vô lý.
Sau một số phân tích cơ bản về lưu lượng mạng, tôi thấy OracleBulkCopy đang gửi và nhận một số lượng lớn các gói nhỏ. Tôi đã sử dụng Wireshark để so sánh các gói cho mỗi và tìm thấy một số kết quả thú vị.
SQL * Loader - sau khi bắt tay kết nối ban đầu - Đưa ra một loạt các 8 kilobyte gói (giao thức TNS) và nhận 60 byte ACK trong phản ứng.
OracleBulkCopy gửi một loạt các 102 byte gói (giao thức TNS) và nhận được một 133 byte gói (TNS protocol) để đáp ứng. Cai gi...!? Nó giống như nó đang gửi một hàng tại một thời điểm!
Với lớp OracleBulkCopy, tôi đang sử dụng kích thước lô 100.000 và giờ bằng cách sử dụng tùy chỉnh IDataReader để đọc từ tệp dữ liệu.
Vì vậy, câu hỏi của tôi là:
Có ai đã từng nhìn thấy hành vi này?
OracleBulkCopy có thực sự hoạt động như một công cụ tải hàng loạt không?
Có điều gì tôi cần phải định cấu hình để hoạt động bình thường không? (cài đặt máy khách/máy chủ, v.v.)
Bất kỳ trợ giúp nào được đánh giá cao.
Tôi có thời gian chèn tương tự bằng cách sử dụng dữ liệu. Thậm chí tệ hơn, một vài cột là loại dấu thời gian vì vậy tôi phải thiết lập cột datatable thành một kiểu OracleTimeStamp mà dường như có một hit tốt khi tôi hồ sơ ứng dụng. Bạn có thể nhận được bản sao hàng loạt được tăng tốc không? Popping ra lệnh để chạy sqlloader có vẻ như một cách thực sự nghèo để xử lý các tập tin lớn trên một máy chủ web! – Dan