Câu hỏi cũ này xứng đáng có một câu trả lời toàn diện hơn. Một số trong số này được đề cập trong các câu trả lời / nhận xét khác ở đây, một số khác có thể hoặc không hoạt động cho tình huống cụ thể của OP, nhưng có thể hoạt động cho những người khác đang tìm cách gọi các procs được lưu trữ không đồng bộ từ SQL.
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:
- 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 : Đối với các kịch bản không đồng bộ phức tạp hơn, hãy 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ẻ mà SQL sẽ thực thi song song. Gọi gói SSIS từ một công việc đại lý SQL.
- Ứ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, việc gọi các tác nhân SQL Agent nghe 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 gói DTS để chạy 8 tác 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.