Tôi sẽ có cơ sở dữ liệu SQL Server 2012 và một bảng có 3 triệu hàng và có thể 50 cột. Điều gì sẽ là cách nhanh nhất cho một quá trình .net nền không được giám sát (có thể phát hành một số lệnh SQL hoặc Powershell) để xuất nó thành tệp văn bản, một dòng cho mỗi hàng dữ liệu? Quá trình .net nên biết khi xuất xong hoặc nếu có bất kỳ lỗi nào. Kiểu dữ liệu sẽ là tất cả int
hoặc nvarchar
.
Tôi giả sử rằng một mã C # thuần sử dụng ado.net để thực thi một select *
lệnh và lặp qua bộ dữ liệu và ghi vào một tệp cho mỗi bản ghi sẽ chậm và không có cách nào tôi có thể song song hóa điều này.
Lý tưởng nhất là xuất sẽ là một thư mục mạng được chia sẻ từ xa chứ không phải là một thư mục cục bộ trên máy SQL Server. Máy chủ SQL sẽ là một cụm HA. SSIS có phù hợp hơn cho việc này không, không cần chuyển đổi dữ liệu?
Quá trình .Net sẽ chạy trên Máy A, Máy chủ SQL trên Máy B và đích tệp cuối cùng là chia sẻ mạng. Một tùy chọn là máy chủ SQL ghi tệp trực tiếp vào mạng chia sẻ. Tùy chọn khác là SQL Server ghi vào máy A và sau đó khi tệp được ghi, quá trình .net sẽ sao chép nó vào mạng chia sẻ. Tôi không có SLA chính thức nhưng mong đợi 30 phút - 1 giờ cho việc ghi tệp.
"Ideally the export will be to a remote shared network folder and not a local folder on the SQL Server machine."
- ứng dụng .NET sẽ chạy từ đâu? Trường hợp xấu nhất, điều này có thể có nghĩa là dữ liệu phải di chuyển qua 2 bước nhảy mạng, đây có thể sẽ là nút cổ chai lớn nhất. Ngoài ra, số lượng hàng có phần không liên quan - tổng kích thước dữ liệu gần đúng là bao nhiêu? Bạn có SLA hiệu suất bạn cần đáp ứng cho quá trình này?