Satu pendekatan umum:
- Nonaktifkan / jatuhkan indeks / batasan pada tabel target.
INSERT dbo.[Target] WITH (TABLOCKX) SELECT ...
- Dengan kredit ke JNK tentu saja, Anda dapat melakukan hal di atas dalam kumpulan
n
baris, yang dapat mengurangi ketegangan pada log transaksi, dan tentu saja berarti bahwa jika beberapa batch gagal, Anda hanya perlu memulai dari batch itu. Saya membuat blog tentang ini (sementara mengacu pada penghapusan, konsep dasar yang sama berlaku) di sini: http://www.sqlperformance.com/2013/03/io-subsystem/chunk-deletes
- Aktifkan kembali / buat ulang indeks / batasan pada tabel target (dan mungkin Anda dapat menunda beberapa dari mereka, jika mereka tidak diperlukan untuk semua operasi, dan lebih penting untuk mendapatkan basis data online dengan cepat).
Jika partisi Anda bersifat fisik dan bukan hanya logis, Anda dapat memperoleh waktu dengan memiliki proses yang berbeda mengisi partisi yang berbeda secara bersamaan (tentu saja ini berarti Anda tidak dapat menggunakan TABLOCK
/ TABLOCKX
). Ini mengasumsikan bahwa sumber juga cocok untuk memilih beberapa proses tanpa tumpang tindih / mengunci dll, dan membuat sisi operasi lebih lambat (petunjuk: buat indeks berkerumun pada sumber yang sesuai dengan skema partisi pada tujuan).
Anda juga dapat mempertimbangkan sesuatu yang jauh lebih primitif, seperti BCP OUT
/BCP IN
.
Saya tidak tahu bahwa saya akan melompat ke SSIS untuk membantu ini. Mungkin ada beberapa efisiensi di sana, tetapi saya tidak tahu bahwa upaya itu membenarkan penghematan.