Kích thước lô được đề xuất cho SqlBulkCopy
là bao nhiêu? Tôi đang tìm một công thức chung tôi có thể sử dụng như một điểm khởi đầu để điều chỉnh hiệu suất.Kích thước lô được đề xuất cho SqlBulkCopy là gì?
Trả lời
Tôi có tiện ích nhập trên cùng một máy chủ vật lý làm phiên bản SQL Server của mình. Sử dụng tùy chỉnh IDataReader
, nó phân tích các tệp phẳng và chèn chúng vào cơ sở dữ liệu bằng cách sử dụng SQLBulkCopy
. Một tệp điển hình có khoảng 6M hàng đủ điều kiện, trung bình 5 cột văn bản thập phân và ngắn, khoảng 30 byte mỗi hàng.
Với kịch bản này, tôi đã tìm thấy kích thước lô là 5.000 là sự thỏa hiệp tốt nhất về tốc độ và mức tiêu thụ bộ nhớ. Tôi bắt đầu với 500 và thử nghiệm với lớn hơn. Tôi tìm thấy 5000 nhanh hơn 2,5 lần, trung bình hơn 500. Chèn 6 triệu hàng mất khoảng 30 giây với kích thước lô là 5.000 và khoảng 80 giây với kích thước lô là 500.
10.000 không thể đo được nhanh hơn. Di chuyển lên đến 50.000 cải thiện tốc độ của một vài điểm phần trăm nhưng nó không có giá trị tăng tải trên máy chủ. Trên 50.000 cho thấy không có sự cải thiện về tốc độ.
Đây không phải là công thức, nhưng đó là một điểm dữ liệu khác để bạn sử dụng.
Tất cả điều này phụ thuộc vào việc triển khai của bạn.
Bạn có thể mong đợi tốc độ nào trên mạng của mình? Bạn có đang sử dụng nó trong Biểu mẫu hoặc ASP.Net không? Bạn có cần cảnh báo cho người dùng về tiến trình không? Kích thước của tổng số công việc là bao nhiêu?
Trong kinh nghiệm của tôi chạy bản sao hàng loạt không có kích thước lô được chỉ định sẽ gây ra vấn đề thời gian chờ. Tôi thích bắt đầu với 1000 bản ghi và thực hiện một số điều chỉnh từ đó.
Tốc độ: Khác nhau, WebForms: Có, ASP.NET: Có, Bảng rộng: Có, Bảng hẹp, Có. Hàng ngàn hàng: có. Hàng triệu hàng: có. Nếu bạn có thể nghĩ về một kịch bản, tôi có thể làm điều đó. –
Tôi phải gắn bó với câu trả lời trước đó của tôi. Tôi không nghĩ có một viên đạn bạc. – Jeremy
Đây là vấn đề mà tôi cũng đã dành thời gian xem xét. Tôi đang tìm cách tối ưu hóa việc nhập các tệp CSV lớn (16+ GB, 65+ triệu bản ghi và phát triển) vào cơ sở dữ liệu SQL Server 2005 bằng cách sử dụng ứng dụng giao diện điều khiển C# (.Net 2.0). Vì Jeremy có already pointed out, bạn sẽ cần thực hiện một số điều chỉnh cho các trường hợp cụ thể của mình, nhưng tôi khuyên bạn nên có kích thước lô ban đầu là 500 và thử nghiệm cả hai giá trị trên và dưới đây.
Tôi nhận đề xuất kiểm tra các giá trị từ 100 đến 1000 cho kích thước lô từ MSDN forum post này và đã hoài nghi. Nhưng khi tôi kiểm tra kích thước lô từ 100 đến 10.000, tôi thấy rằng 500 là giá trị tối ưu cho ứng dụng của tôi. Giá trị 500 cho SqlBulkCopy.BatchSize
cũng được đề xuất here.
Để tiếp tục tối ưu hóa hoạt động SqlBulkCopy của bạn, hãy xem MSDN advice này; Tôi thấy rằng việc sử dụng SqlBulkCopyOptions.TableLock giúp giảm thời gian tải.
Tôi sẽ cho rằng chạy lệnh sao chép số lượng lớn trong chính máy chủ có thể sẽ nhanh hơn. –
Như những người khác đã nêu, điều đó phụ thuộc vào môi trường của bạn cụ thể là khối lượng hàng và thời gian chờ của mạng.
Cá nhân, tôi sẽ bắt đầu bằng cách đặt thuộc tính BatchSize
thành 1000 hàng và xem cách thực hiện. Nếu nó hoạt động, sau đó tôi tiếp tục tăng gấp đôi số hàng (ví dụ: 2000, 4000, v.v.) cho đến khi tôi hết thời gian chờ.
Nếu không, nếu thời gian chờ xảy ra ở 1000, thì tôi sẽ giảm số lượng hàng xuống một nửa (ví dụ: 500) cho đến khi hoạt động.
Trong mỗi trường hợp, tôi tiếp tục tăng gấp đôi (nếu thành công) hoặc giảm một nửa (nếu không thành công) sự khác biệt giữa mỗi kích thước hàng loạt thử cuối cùng cho đến khi tìm điểm ngọt.
Yếu tố khác cần xem xét là phải mất bao lâu để sao chép đơn hàng lô hàng. Thời gian chờ sẽ xảy ra nếu lô hàng được sao chép vượt quá thuộc tính BulkCopyTimeout
theo mặc định là 30 giây. Bạn có thể thử tăng gấp đôi thuộc tính BulkCopyTimeout
lên 60 giây. Điều này cho phép một khoảng thời gian dài hơn cho một tập hợp lớn các hàng loạt được sao chép. Ví dụ: một loạt 50.000 hàng có thể mất khoảng 40 giây chỉ vượt quá giới hạn thời gian 30 giây, do đó việc tăng tốc lên tới 60 giây có thể giúp hiệu suất.
- 1. Kích thước cột cơ sở dữ liệu được đề xuất cho tên là gì?
- 2. Làm thế nào để bạn xác định Kích thước lô hàng ADO.NET được đề xuất trong thế giới thực?
- 3. Cách được đề xuất cho tiền tố Console.Write là gì?
- 4. nhibernate luân phiên kích thước lô
- 5. Giảm kích thước là gì?
- 6. Kích thước mẫu EC2 được đề xuất cho một cụm Ejabberd
- 7. Kích thước lô hàng loạt java elasticsearch
- 8. Kích thước tối đa cho các thư SockJS là gì?
- 9. Kích thước tối ưu cho ứng dụng Android là gì?
- 10. Kích thước varchar tối ưu cho MySQL là gì?
- 11. Phông chữ và kích thước chuẩn cho tiêu đề điều hướng iPhone là gì?
- 12. Kích thước hợp lý cho ứng dụng iPhone là gì?
- 13. Kích thước của con trỏ là gì?
- 14. Kích thước tối đa được đề xuất của đối tượng JSON bên ngoài trong JavaScript
- 15. SqlBulkCopy: Sự khác nhau giữa việc truyền SqlBulkCopyOptions.UseInternalTransaction và không vượt qua nó là gì?
- 16. Kích thước được giữ lại cho một đối tượng trên heapdump là gì?
- 17. Kích thước khối Hadoop và vấn đề kích thước tệp?
- 18. Tạo cửa sổ lô có kích thước riêng
- 19. Loại dữ liệu được đề xuất cho phép tính khoa học trong .Net là gì?
- 20. Trọng tải yêu cầu được đề xuất/hiệu quả cho phương pháp REST PUT là gì?
- 21. Phương pháp tạo kiểu được đề xuất cho ứng dụng iOS là gì?
- 22. Giới hạn kích thước của yêu cầu đăng là gì?
- 23. Kích thước tối đa của bộ đệm Node.js là gì
- 24. cách tốt nhất để có kích thước tệp là gì?
- 25. Kích thước của một Nullable <Int32> là gì?
- 26. Kích thước phông chữ tiêu đề ActionBar mặc định là gì?
- 27. Kích thước Heap của Samsung Galaxy S3 là gì?
- 28. "Em" là gì nếu kích thước phông chữ của tài liệu được chỉ định bằng ems?
- 29. Thực tiễn tốt nhất cho kích thước trường dữ liệu chuỗi là gì?
- 30. Vấn đề kích thước nội dung cho UITableView trong UIscrollView
Một điều cần xem xét là nếu bảng trống và có chỉ mục. Trong những trường hợp đó, bạn có thể muốn tải lên mọi thứ trong một lô như đã đề cập ở đây: https://technet.microsoft.com/en-us/library/ms177445(v=sql.105).aspx "Nếu bạn nhập dữ liệu hàng loạt vào một bảng trống với các chỉ mục và bạn chỉ định kích thước lô, bảng sẽ trở thành không trống sau đợt đầu tiên. Bắt đầu với lô thứ hai, dữ liệu được ghi lại đầy đủ. " – Sal