Pada satu titik saya menjawab pertanyaan ini di StackOverflow , tetapi sepertinya akan berguna untuk memiliki informasi itu di DBA.SE juga, direvisi dan diperbarui.
Secara eksplisit: TSQL tidak (dengan sendirinya) memiliki kemampuan untuk meluncurkan operasi TSQL lainnya secara tidak sinkron .
Itu tidak berarti Anda masih tidak memiliki banyak opsi (beberapa di antaranya disebutkan dalam jawaban lain):
- Pekerjaan SQL Agent : Buat beberapa pekerjaan SQL, dan jadwalkan untuk dijalankan pada waktu yang diinginkan, atau mulai secara asinkron dari "master control" yang disimpan menggunakan proc
sp_start_job
. Jika Anda perlu memantau progresnya secara programatik, pastikan masing-masing pekerjaan memperbarui tabel JOB_PROGRESS khusus (atau Anda dapat memeriksa apakah mereka telah selesai menggunakan fungsi tidak berdokumen xp_sqlagent_enum_jobs
seperti dijelaskan dalam artikel yang sangat bagus ini oleh Gregory A. Larsen). Anda harus membuat pekerjaan terpisah sebanyak yang Anda inginkan untuk menjalankan proses paralel, bahkan jika mereka menjalankan proc tersimpan yang sama dengan parameter yang berbeda.
- Paket SSIS : Buat paket SSIS dengan alur tugas percabangan yang sederhana. SSIS akan meluncurkan tugas-tugas tersebut dalam masing-masing spid, yang akan dieksekusi SQL secara paralel.
- Aplikasi khusus : Tulis aplikasi kustom sederhana dalam bahasa pilihan Anda (C #, Powershell, dll), menggunakan metode asinkron yang disediakan oleh bahasa itu. Panggil proc tersimpan SQL di setiap utas aplikasi.
- OLE Automation : Dalam SQL, gunakan
sp_oacreate
dan sp_oamethod
untuk meluncurkan proses baru memanggil masing-masing proc tersimpan lainnya seperti yang dijelaskan dalam artikel ini , juga oleh Gregory A. Larsen.
- Pialang Layanan : Lihat ke dalam menggunakan Pialang Layanan , contoh yang baik dari eksekusi asinkron dalam artikel ini .
- Eksekusi Paralel CLR : Gunakan perintah CLR
Parallel_AddSql
dan Parallel_Execute
seperti yang dijelaskan dalam artikel ini oleh Alan Kaplan (SQL2005 + saja).
- Tugas Windows Terjadwal : Terdaftar untuk kelengkapan, tapi saya bukan penggemar opsi ini.
Jika itu saya, saya mungkin akan menggunakan beberapa SQL Agent Jobs dalam skenario yang lebih sederhana, dan paket SSIS dalam skenario yang lebih kompleks.
Dalam kasus Anda, kecuali jika Anda mencoba meluncurkan 200 utas terpisah, beberapa pekerjaan Agen terjadwal terdengar seperti pilihan yang sederhana dan mudah dikelola.
Satu komentar terakhir : SQL sudah mencoba untuk memparalelkan operasi individual kapan saja *. Ini berarti menjalankan 2 tugas pada saat yang sama alih-alih setelah satu sama lain tidak ada jaminan bahwa itu akan selesai lebih cepat. Tes dengan hati-hati untuk melihat apakah itu benar-benar meningkatkan sesuatu atau tidak.
Kami memiliki pengembang yang membuat paket DTS untuk menjalankan 8 tugas secara bersamaan. Sayangnya, itu hanya server 4-CPU :)
* Dengan asumsi pengaturan default. Ini dapat dimodifikasi dengan mengubah Derajat Maksimal Paralelisme atau Masker Afinitas server, atau dengan menggunakan petunjuk kueri MAXDOP.