2014-12-19 12 views
1

매주 및 매월 실행되는 약 100 개의 링크 된 보고서가 있습니다. DB 테이블에서 특정 기간 동안 보고서 서버 폴더를 동적으로 생성하고 db 테이블에서 연결된 SSRS 보고서를 생성하는 C# 콘솔을 작성했습니다. 이 보고서는 정상적으로 실행되지만 각 보고서는 foreach 루프에서 한 번에 하나씩 실행됩니다. 이러한 보고서는 하룻밤 사이에 실행하면 문제가되지 않지만 때로는 이러한 보고서가 (어떤 이유로 든) 실패하고 DB에 실패한 보고서가 표시되는 경우가 있습니다.여러 스레드에서 여러 SSRS 보고서를 실행하는 방법

내 질문 :스레드에서 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); 

어떤 도움이 정말 감사하겠습니다. 많은 감사

+0

SSRS에는 보고서를 실행하도록 예약 할 수있는 기능이 있습니다. 이러한 방식으로 실행하는 데는 충분한 이유가없는 것으로 보입니다. –

+0

동적으로 보고서 서버 폴더를 만들고 일정을 통해 링크 된 보고서를 만들 수 있습니까? 매주/매월 새로운 처리 기간을 가진 폴더 구조를 만들어 사용자가 주어진 시간 동안 과거의 데이터를 볼 수있게해야합니다. – user1221584

+0

보고서 기록은 스냅 샷으로 얻을 수 있습니다. 스냅 샷의 그룹화 또는 사용자 지정 목록이 가능할 수 있습니다.어쨌든 스냅 샷을 사용하는 것만으로 전체 프로세스가 크게 향상 될 것입니다. 스냅 샷을 실행하면 각 보고서에 대한 최신 스냅 샷을 적절한 폴더에 저장하는 '간단한'다운로드 만 수행하면됩니다. – Paolo

답변

0

간단히 말해서 : 여러 클라이언트가 사용 가능한 보고서에 동시에 액세스하는 것처럼 모든 보고서 생성을 공유하는 여러 C# 콘솔 클라이언트를 만듭니다. 이 방법으로 보고서 생성이 일괄 적으로 실행되는지 확인할 수 있습니다. SSRS 서버가 동시에 특정 수의 보고서를 처리하도록 강요 할 수 없으므로 그게 전부입니다. 보고서 생성을 요청하는 방법과 관계없이 작업 부하를 처리합니다.

그럼에도 불구하고, 나는 이것이 잘못된 접근이라고 생각합니다.

SSRS는 원하는만큼 많은 보고서를 동시에 처리해야하며 보고서가 동시에 요청되고 처리되는 경우에도 SQL Server 엔진은 생각한대로 작업 부하를 다시 처리합니다 그것이해야합니다. 즉, 모든 보고서 (또는 N 개의 보고서 일괄 처리)를 동시에 실행해도 전체 시간이 더 짧아지는 것은 아닙니다. 계정을 고려해야 할 또 다른 사항은 보고서를 렌더링하는 데 총 실행 시간 중 상당 부분 (모든 SQL 쿼리를 실행하는 것보다 훨씬 많은 시간이 소요될 수 있음)이 소요될 수 있으며 이로 인해 CPU를 많이 사용하게됩니다.

올바른 방법은 모든 해당 기록 데이터 (순수하게 DB 엔진 프로세스)를 보유하는 데이터웨어 하우스를 작성하는 것이며 보고서 (날짜 매개 변수를 사용해야 함)는 데이터웨어 하우스에 이미 저장된 데이터에 액세스하십시오.

어쨌든 저는 DW를 만드는 것이 큰 프로젝트이므로보다 쉬운 해결책을 찾고 있습니다. 이를 위해 병목 현상 (SQL 엔진, ssrs 렌더링, ...)을 식별하고 병목 현상을 해결하기 위해 가능한 경우 리소스 균형을 맞추거나 증가시켜야합니다.

아마도 당신이 필요로하는 답은 아니지만 전체 처리 시간에 거의 또는 전혀 영향을 미치지 않는 솔루션을 개발하는 데 시간을 절약 할 수 있습니다.

관련 문제