2008-11-10 30 views
8

Tôi muốn làm điều gì đó như:Làm thế nào tôi có thể chạy các thủ tục lưu trữ máy chủ sql song song?

exec sproc1 and sproc2 at the same time 
when they are both finished exec sproc3 

Tôi có thể làm điều này trong dts. Có cách nào để làm điều đó trong giao dịch sql? Hoặc có cách nào để làm điều đó với một tập lệnh batch (vbs hoặc powershell) không?

+0

Có thể trả lời câu hỏi dễ dàng hơn nếu bạn nêu rõ lý do tại sao, ngoài câu hỏi thú vị. Sau đó, chúng tôi có thể giải quyết mục đích chứ không phải là kỹ thuật. – dkretz

+0

Nạp dữ liệu vào một datawarehouse sql-server liên quan đến việc thực hiện nhiều câu lệnh sql. Khả năng thực hiện các câu lệnh song song sẽ làm tăng tốc quá trình này. Bạn có thể làm điều này với DTS, một công cụ. Tôi là một trong những người thích sử dụng mã khi có thể. – cindi

Trả lời

4

sp _ bắt đầu _ công việc

tôi đang làm một điều tương tự vào lúc này, và cách duy nhất tôi đã tìm thấy để tránh sử dụng SSIS hoặc một số vỏ bên ngoài được chia thói quen tải của tôi vào 'chủ đề' bằng tay, và sau đó cháy một công việc chủ sqlagent duy nhất mà lần lượt thực hiện như nhiều sp _ bắt đầu _ công việc như tôi có chủ đề. Từ thời điểm đó, tất cả họ đều chạy một cách tự chủ.

Nó không chính xác những gì chúng tôi đang tìm kiếm, nhưng kết quả là như nhau. Nếu bạn kiểm tra trạng thái công việc cho các công việc phụ, bạn có thể thực hiện bắt đầu có điều kiện của sproc 3 là tốt.

Điểm trong 8 lõi nếu chúng ta không thể sử dụng tất cả cùng một lúc?

+0

Điều này thật tuyệt! Khi mỗi luồng kết thúc, tôi có thể kiểm tra từng công việc khác, vì vậy luồng cuối cùng để hoàn thành có thể kích hoạt công việc tiếp theo. – cindi

5

Bạn có thể tạo thủ tục lưu trữ CLR (sử dụng C#) sẽ gọi hai số đầu tiên trên các chuỗi riêng của chúng, sau đó chặn cho đến khi cả hai đều hoàn thành ... sau đó chạy lệnh thứ ba.

Bạn có thể sử dụng CLR sprocs trong trường hợp của mình không? Nếu có, tôi sẽ chỉnh sửa câu trả lời này để có thêm chi tiết.

+0

cảm ơn Timothy, nhưng tôi đoán tôi chỉ may mắn cho một giải pháp cấp cao: thêm một vài dòng mã sql giao dịch hoặc hàng loạt. Tôi chỉ tự hỏi là có một thay thế đơn giản để dts - Cindi – cindi

+0

Thread.Join bị chặn bởi các thuộc tính bảo vệ máy chủ. Giải pháp này có thể được thực hiện để làm việc, nhưng nó không phải là đáng tin cậy. Cũng lưu ý rằng SQL Server có thể mang lại chủ đề của bạn bất cứ khi nào nó cảm thấy như nó. –

1

Bạn có thực sự cần cả hai SP để thực hiện song song không?

Với các câu lệnh CRUD đơn giản trong một SP duy nhất, tôi đã tìm thấy SQL S. thực hiện một công việc rất tốt để xác định xem chúng có thể chạy song song và làm như vậy. Tôi chưa bao giờ thấy SQL S. chạy 2 SP song song nếu cả hai được gọi tuần tự từ một câu lệnh T-SQL, thậm chí không biết nếu nó thậm chí có thể.

Giờ thì, DTS có thực sự thực thi chúng song song không? Nó có thể được nó chỉ đơn giản là thực hiện chúng tuần tự, sau đó gọi SP thứ 3 sau khi kết thúc cuối cùng thành công.

Nếu nó thực sự chạy song song, có lẽ bạn nên gắn bó với DTS, nhưng sau đó tôi muốn biết điều gì xảy ra nếu tôi có một cuộc gọi gói DTS, nói, 10 SP nhiệm vụ nặng song song ... có thể phải làm một số thử nghiệm để biết rằng bản thân mình: D

+0

Tách một câu lệnh thành các luồng song song là một chủ đề khác. DTS có thể chạy các câu lệnh riêng biệt song song và cung cấp cho bạn rất nhiều nếu kiểm soát cách thực hiện điều này. Tuy nhiên đôi khi mã là thích hợp hơn với một công cụ, đó là lý do cho câu hỏi. – cindi

0

Bạn có thể sử dụng SSIS. Những lợi ích của việc này là gói có thể được lưu trữ trong SQL Server và dễ dàng lên lịch ở đó.

Từ PowerShell hoặc chỉ là về bất kỳ ngôn ngữ kịch bản bên ngoài nào, bạn có thể sử dụng dòng lệnh SQL osql hoặc sqlcmd. Kỹ thuật này cũng có thể được sử dụng để lên lịch cho nó trên SQL Server bằng cách bắn phá bằng cách sử dụng xp_cmdshell.

+0

SSIS = DTS, câu hỏi là làm thế nào để tránh DTS Rõ ràng bạn có thể chạy SQL từ một ngôn ngữ kịch bản, câu hỏi là làm thế nào để chạy các số liệu thống kê SQL song song. – cindi

Các vấn đề liên quan