Tại một thời điểm tôi đã trả lời câu hỏi này tại StackOverflow , nhưng có vẻ như sẽ hữu ích khi có thông tin đó tại DBA.SE, được sửa đổi và cập nhật.
Hoàn toàn rõ ràng: TSQL không (tự nó) có khả năng khởi chạy các hoạt động TSQL khác không đồng bộ .
Điều đó không có nghĩa là bạn vẫn không có nhiều lựa chọn (một số trong số chúng được đề cập trong các câu trả lời khác):
- Các công việc của Tác nhân SQL : Tạo nhiều công việc SQL và lên lịch cho chúng chạy vào thời gian mong muốn hoặc khởi động chúng không đồng bộ từ một "điều khiển chính" được lưu trữ bằng cách sử dụng
sp_start_job
. Nếu bạn cần theo dõi tiến trình của họ theo chương trình, chỉ cần đảm bảo mỗi công việc cập nhật bảng JOB_PROGRESS tùy chỉnh (hoặc bạn có thể kiểm tra xem họ đã hoàn thành chưa sử dụng chức năng không có giấy tờ xp_sqlagent_enum_jobs
như được mô tả trong bài viết xuất sắc này của Gregory A. Larsen). Bạn phải tạo nhiều công việc riêng biệt như bạn muốn các quy trình song song đang chạy, ngay cả khi chúng đang chạy cùng một Proc được lưu trữ với các tham số khác nhau.
- Gói SSIS : Tạo gói SSIS với luồng tác vụ phân nhánh đơn giản. SSIS sẽ khởi chạy các tác vụ đó trong các spids riêng lẻ, SQL sẽ thực thi song song.
- Ứng dụng tùy chỉnh : Viết một ứng dụng tùy chỉnh đơn giản bằng ngôn ngữ bạn chọn (C #, Powershell, v.v.), sử dụng các phương thức không đồng bộ được cung cấp bởi ngôn ngữ đó. Gọi một SQL được lưu trữ trên mỗi luồng ứng dụng.
- Tự động hóa OLE : Trong SQL, sử dụng
sp_oacreate
và sp_oamethod
để khởi chạy một quy trình mới gọi nhau là Proc được lưu trữ như được mô tả trong bài viết này , cũng bởi Gregory A. Larsen.
- Nhà môi giới dịch vụ : Xem xét việc sử dụng Nhà môi giới dịch vụ , một ví dụ điển hình về thực thi không đồng bộ trong bài viết này .
- Thực thi song song CLR : Sử dụng các lệnh CLR
Parallel_AddSql
và Parallel_Execute
như được mô tả trong bài viết này của Alan Kaplan (chỉ SQL2005 +).
- Các tác vụ Windows được lên lịch : Được liệt kê để hoàn thiện, nhưng tôi không phải là người hâm mộ của tùy chọn này.
Nếu là tôi, có lẽ tôi sẽ sử dụng nhiều Công việc Tác nhân SQL trong các tình huống đơn giản hơn và gói SSIS trong các tình huống phức tạp hơn.
Trong trường hợp của bạn, trừ khi bạn đang cố gắng khởi chạy 200 luồng riêng biệt, nhiều công việc Đại lý theo lịch trình có vẻ như là một lựa chọn đơn giản và dễ quản lý.
Một nhận xét cuối cùng : SQL đã cố gắng song song hóa các hoạt động riêng lẻ bất cứ khi nào có thể *. Điều này có nghĩa là chạy 2 nhiệm vụ cùng một lúc thay vì sau nhau không đảm bảo rằng nó sẽ hoàn thành sớm hơn. Kiểm tra cẩn thận để xem liệu nó thực sự cải thiện bất cứ điều gì hay không.
Chúng tôi đã có một nhà phát triển tạo ra một gói DTS để chạy 8 nhiệm vụ cùng một lúc. Thật không may, nó chỉ là một máy chủ 4 CPU :)
* Giả sử cài đặt mặc định. Điều này có thể được sửa đổi bằng cách thay đổi Mức độ song song hoặc mặt nạ tối đa của máy chủ hoặc bằng cách sử dụng gợi ý truy vấn MAXDOP.