Một cách tiếp cận phổ biến:
- Vô hiệu hóa / thả chỉ mục / ràng buộc trên bảng đích.
INSERT dbo.[Target] WITH (TABLOCKX) SELECT ...
- Tất nhiên, với tín dụng cho JNK, bạn có thể thực hiện các thao tác trên theo từng đợt
n
, điều này có thể làm giảm căng thẳng cho nhật ký giao dịch và tất nhiên có nghĩa là nếu một số đợt thất bại, bạn chỉ phải bắt đầu từ đợt đó. Tôi đã viết blog về điều này (trong khi tham chiếu đến việc xóa, các khái niệm cơ bản tương tự được áp dụng) ở đây: http://www.sqlperformance.com/2013/03/io-subystem/chunk-deletes
- Kích hoạt lại / tạo lại các chỉ mục / ràng buộc trên bảng đích (và có lẽ bạn có thể trì hoãn một số trong số chúng, nếu chúng không cần thiết cho tất cả các hoạt động và điều quan trọng hơn là nhanh chóng lấy dữ liệu cơ sở trực tuyến).
Nếu các phân vùng của bạn là vật lý và không chỉ logic, bạn có thể có được một chút thời gian bằng cách có các quy trình khác nhau đồng thời phân vùng các phân vùng khác nhau (tất nhiên điều này có nghĩa là bạn không thể sử dụng TABLOCK
/ TABLOCKX
). Điều này giả định rằng nguồn cũng phù hợp cho nhiều quá trình lựa chọn mà không chồng chéo / khóa, v.v. và làm cho phía đó của hoạt động chậm hơn (gợi ý: tạo một chỉ mục cụm trên nguồn phù hợp với sơ đồ phân vùng trên đích).
Bạn cũng có thể xem xét một cái gì đó nguyên thủy hơn nhiều, như BCP OUT
/BCP IN
.
Tôi không biết rằng tôi sẽ nhảy đến SSIS để giúp đỡ việc này. Có thể có một số hiệu quả ở đó, nhưng tôi không biết rằng nỗ lực này biện minh cho việc tiết kiệm.