Pertanyaan lama ini layak mendapat jawaban yang lebih komprehensif. Beberapa di antaranya disebutkan dalam jawaban / komentar lain di sini, yang lain mungkin atau mungkin tidak bekerja untuk situasi spesifik OP, tetapi mungkin bekerja untuk orang lain yang mencari memanggil procs yang disimpan secara asinkron dari SQL.
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:
- 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 programatis, 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 : Untuk skenario asinkron yang lebih rumit, buat paket SSIS dengan alur tugas percabangan sederhana. SSIS akan meluncurkan tugas-tugas tersebut dalam masing-masing spid, yang akan dieksekusi SQL secara paralel. Panggil paket SSIS dari pekerjaan agen SQL.
- 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, memanggil pekerjaan SQL Agent 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 bukan jaminan bahwa itu akan selesai lebih cepat. Uji dengan cermat 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 Topeng Affinity server, atau dengan menggunakan petunjuk permintaan MAXDOP.