Trong câu trả lời này, tôi sẽ cố gắng cung cấp thông tin từ tài liệu chính thức của SSIS và tôi sẽ đề cập đến trải nghiệm cá nhân của tôi với SQL Server đích.
1. Đích đến của máy chủ SQL
Theo tài liệu SQL Server Destination chính thức:
Đích SQL Server kết nối với cơ sở dữ liệu SQL Server cục bộ và tải hàng loạt dữ liệu vào các bảng và dạng xem SQL Server. Bạn không thể sử dụng đích SQL Server trong các gói truy cập cơ sở dữ liệu SQL Server trên máy chủ từ xa. Thay vào đó, các gói phải sử dụng đích OLE DB.
SQL Server đích cung cấp cùng một tốc độ cao chèn dữ liệu vào SQL Server mà tác vụ Chèn hàng loạt cung cấp; tuy nhiên, bằng cách sử dụng đích SQL Server, một gói có thể áp dụng các phép biến đổi cho dữ liệu cột trước khi dữ liệu được tải vào SQL Server.
Để tải dữ liệu vào SQL Server, bạn nên cân nhắc sử dụng đích SQL Server thay vì đích OLE DB
2. Điểm đến của OLEDB
Theo tài liệu chính thức về Điểm đến của OLEDB:
Đích OLEDB - tùy chọn tải nhanh:Tải dữ liệu vào bảng hoặc chế độ xem trong đích OLE DB và sử dụng tùy chọn tải nhanh, được tối ưu hóa cho chèn hàng loạt
3. Đích OLEDB so với Đích máy chủ SQL
Theo SQL Server Destination Vs OLE DB Destination - Chủ đề MSDN:
Donald Farmer, cựu Giám đốc Chương trình Nhóm về Dịch vụ Tích hợp cho biết rằng bạn có thể tăng hiệu suất từ 5 đến 10% bằng cách sử dụng SQL Server Destination
.
Ngoài ra, hãy tham khảo bài đăng sau của Matt Masson, chuyên gia tích hợp dữ liệu tại Microsoft, nơi anh ấy đã trả lời câu hỏi sau:
Tôi có nên sử dụng SQL Server Destination không?
Câu trả lời là
Không
...
Khuyến nghị của tôi là nếu bạn cần từng chút hiệu suất (tăng 10% hiệu suất khi tải 10 giờ có thể là đáng kể), hãy thử SQL Server Destination để xem nó hoạt động như thế nào đối với bạn. Tuy nhiên - hãy nhớ những giới hạn sau của SQL Server Destination:
- Bạn phải có SSIS chạy trên cùng một máy với cơ sở dữ liệu đích
- Bạn phải chạy gói với tư cách quản trị viên
- Rất khó gỡ lỗi khi có sự cố
Do những hạn chế này, Tôi khuyên bạn nên sử dụng Đích đến của OLE DB ngay cả khi bạn đang thấy sự gia tăng hiệu suất với SQL Server Destination.
3.1. Hướng dẫn Hiệu suất Tải Dữ liệu
(Cập nhật @ 2019-03-25)
Trong khi tìm kiếm các phương pháp hay nhất về SSIS, tôi đã tìm thấy một bản vẽ minh họa rất hữu ích của Microsoft có thể được sử dụng làm tài liệu tham khảo:
- Hướng dẫn Hiệu suất Tải Dữ liệu
Trong bài viết này, họ đã so sánh giữa tất cả các phương pháp tải dữ liệu bao gồm đích đến của SQL Server và đích OLEDB, họ đã đề cập rằng:
Đích đến của máy chủ SQL Đích đến của SQL Server là cách nhanh nhất để tải dữ liệu hàng loạt từ luồng dữ liệu Dịch vụ tích hợp sang SQL Server. Đích này hỗ trợ tất cả các tùy chọn tải hàng loạt của SQL Server - ngoại trừ ROWS_PER_BATCH.
Lưu ý rằng đích này yêu cầu kết nối bộ nhớ được chia sẻ với SQL Server. Điều này có nghĩa là nó chỉ có thể được sử dụng khi Dịch vụ tích hợp đang chạy trên cùng một máy tính vật lý như SQL Server.
Đích đến của OLE DB: Đích OLE DB hỗ trợ tất cả các tùy chọn tải hàng loạt cho SQL Server. Tuy nhiên, để hỗ trợ tải số lượng lớn đã đặt hàng, cần có một số cấu hình bổ sung. Để biết thêm thông tin, hãy xem “Dữ liệu đầu vào được sắp xếp”. Để sử dụng API hàng loạt, bạn phải định cấu hình đích này cho "tải nhanh".
OLE DB đích có thể sử dụng cả TCP / IP và các kết nối đường ống được đặt tên tới SQL Server. Điều này có nghĩa là đích OLE DB, không giống như đích SQL Server, có thể chạy trên một máy tính khác với mục tiêu tải hàng loạt. Bởi vì các gói Dịch vụ tích hợp sử dụng đích OLE DB không cần phải chạy trên chính máy tính SQL Server, bạn có thể mở rộng quy trình ETL với các máy chủ workhorse.
3.2. Kinh nghiệm cá nhân
(Cập nhật @ 2019-03-25)
Vì câu hỏi này được nhiều người sử dụng làm tài liệu tham khảo và sau khi có nhiều kinh nghiệm hơn trong miền này, tôi đã thêm phần này để đề cập đến trải nghiệm cá nhân của tôi khi sử dụng SQL Server đích.
Mặc dù tài liệu chính thức đã đề cập rằng đích đến của SQL Server sẽ tăng hiệu suất, nhưng tôi không khuyến khích sử dụng thành phần này do nhiều lý do:
- Nó yêu cầu máy chủ đích và máy chủ ETL giống nhau (chỉ hoạt động với máy chủ SQL cục bộ)
- Nó luôn đưa ra những ngoại lệ không có bất kỳ ý nghĩa nào
- Sau khi thử nghiệm trên khối lượng dữ liệu khổng lồ, sự khác biệt về hiệu suất với điểm đến OLEDB là không đáng kể (được thử nghiệm trên khoảng 500 GB dữ liệu được tải theo từng phần và thời gian chênh lệch là dưới một phút)
Bạn cũng có thể tham khảo bài đăng sau (từ @billinkc) để biết thêm thông tin về chủ đề này:
- Các gói SSIS và cơ sở dữ liệu SQL có nên nằm trên cùng một máy chủ không?
4. Kết luận
Dựa trên các bài báo của Microsoft, bạn có thể nói rằng SQL Server Destination
tăng hiệu suất của việc chèn dữ liệu (nó sử dụng BULK insert) , nhưng nó được thiết kế cho một trường hợp cụ thể là máy chủ SQL cục bộ. OLEDB Destination
tổng quát hơn và được khuyến nghị trong các trường hợp khác và bằng cách sử dụng Fast Load
chế độ truy cập dữ liệu (cũng sử dụng chèn BULK) trên OLE DB destination
nó sẽ tăng hiệu suất tải dữ liệu.
Mặt khác, dựa trên kinh nghiệm của tôi và từ nhiều bài báo được viết bởi các chuyên gia SSIS, hoàn toàn không nên sử dụng SQL Server Destination vì nó không ổn định và nó thường ném ra ngoại lệ và hiệu suất có thể được coi là không đáng kể.
Thông tin bổ sung
Gần đây, tôi đã xuất bản một bài báo chi tiết về chủ đề này. Bạn có thể kiểm tra nó tại:
- Đích đến của SSIS OLE DB so với Đích của máy chủ SQL