簡體   English   中英

如何在多個線程上運行多個SSRS報告

[英]How can I run multiple SSRS reports on multiple threads

我有大約100個鏈接的報告,它們每周和每月運行一次。 我將ac#控制台放在一起,該控制台從db表動態創建特定時間段的Report Server文件夾,並從db表創建鏈接的SSRS報告。 這些報告運行良好,但是每個報告在一個foreach循環中一次運行一個,如果您在一夜之間運行它們會很好,但是有時這些報告會失敗(由於某種原因),並且失敗的報告會在數據庫中標記為此類。

我的問題是:如何在一個線程上運行(例如)10個報表,並同時運行每個線程– 10個線程同時運行,因此運行所有報表的時間應該更快。 在星期一重新運行任何失敗的報告應該花費一小部分時間。 這有可能嗎?

在我的c#控制台中,我正在使用ReportingService2010創建鏈接的報告:

ReportingService2010.CreateLinkedItem(linkedReport, folder, existingReportPath, props);

ReportingService2010.SetExecutionOptions(reportPath, "Snapshot", new NoSchedule());

ReportingService2010.SetItemHistoryOptions(reportPath, true, true, new NoSchedule());

ReportingService2010.UpdateItemExecutionSnapshot(reportPath);

任何幫助將非常感激。 非常感謝

直接的解決方案是:創建幾個共享所有報告生成的C#控制台客戶端(就像幾個客戶端正在同時訪問可用的報表一樣)。 這樣,您可以確定報表生成是分批執行的。 就是這樣,因為您不能強制SSRS服務器同時處理一定數量的報告。 無論您如何請求生成報告,它都會處理其工作量。

但是,我認為這是錯誤的方法。

您必須考慮到SSRS將同時處理所需數量的報告,即使同時請求和處理這些報告,SQL Server引擎也會按照其認為的那樣處理(再次)工作負載。 所有這一切意味着並發執行所有報告(或成批N個報告)不會確保您的總時間將會減少。 要考慮的另一件事是,呈現報告可能會占用總執行時間的很大一部分(有時比執行所有sql查詢要多得多),這會大量占用CPU。

另一方面,正確的方法是創建一個存儲所有歷史數據的數據倉庫(這將是純DB引擎進程),而報表(應使用日期參數)只是已經訪問數據的一種方式存儲在數據倉庫中。

無論如何,我知道創建DW是一個大項目,您正在尋找更簡單的解決方案。 為此,您需要確定瓶頸在哪里(SQL引擎,ssrs呈現等),並嘗試平衡或增加您的資源(如果可能)以釋放該瓶頸。

可能不是您需要的答案,但可以節省您嘗試開發對總處理時間幾乎沒有影響的解決方案的時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM