2011-03-22 2 views
0

virt 서버에 4Gb가있는 Win 2k3 가상 서버에는 SQL과 SSRS 2k5가 있습니다.SQL/SSRS 2k5에 대한 보고서 소요 시간은 10 분을 넘고 쿼리는 3 분 미만

우리는 우리의 비교 보고서를 실행, IT는 시저가 여러 테이블에서 데이터를 끌어 데이터베이스 A.에 저장된 프로 시저를 호출하고합니다 (VIRT 서버를 실행하는 서버> 32GB의가 있습니다) 데이터베이스 B.에보기에서

나는 프로파일 러를 실행하고 통화를 모니터링하는 경우

은, 내가 보는 활동

SQL : BatchStarting SELECT DATABASEPROPERTYEX (DB_NAME(), '정렬'), COLLATIONPROPERTY (CONVERT (CHAR, DATABASEPROPERTYEX (DB_NAME() '데이터 정렬')), 'LCID')

실제 proc 호출이 나타날 때까지 몇 분 기다립니다.

RPC : 완료 간부 sp_executesql을 N'exec [procGetLicenseSales_ALS_Voucher] @CurrentLicenseYear, @CurrentStartDate, @CurrentEndDate, '낚시 라이센스', OpenLicenseAccounts @ @PreviousLicenseYear, ', N'@ CurrentStartDate 날짜 @ CurrentEndDate 날짜 @ CurrentLicenseYear INT @ PreviousLicenseYear INT @ OpenLicenseAccounts NVARCHAR (4000) '@ CurrentStartDate = "2010-11-01 00 : 00 : 00 : 000'= @ CurrentEndDate '2010-11- 30 00 : 00 : 00 : 밖으로 000 ', @ CurrentLicenseYear = 2010 @ PreviousLicenseYear = 2009 @ OpenLicenseAccounts = NULL

후 더 많은 시간, 보통 보고서의 시간. 디자이너에서 실행하면 약 20 분이 걸립니다.

이 보고서는 천천히 그래도 10 분 미만으로 몇 달 동안 작동했습니다.

(프로필러에서 캡처 한) 쿼리를 SQL Server Management Studio에 놓으면 실행하는 데 2 ​​분 8 초가 소요됩니다.

데이터베이스 B에는 변경된 부분이 있고 데이터가 복제되었습니다 (데이터 만 읽음, 모든 새 데이터는 야간 복제에서 가져옴).

뭔가가 분명히 변경되었지만 보고서가 변경되었습니다. SSRS 파트가 영원히 오래 걸리는 이유를 알아 내기 위해 테스트 할 수 있지만 쿼리가 약 2 분 안에 실행됩니까?

추가 : 저장된 proc은 언제든지 18 개의 행을 반환합니다. (우리는 추적 할 제품이 18 개뿐입니다.) 보고서는 18 개의 행을 그룹화하고 합계를 계산합니다. 행렬이없고, 단 하나의 페이지, 매우 간단합니다.

+0

1. 저장 로컬 컴퓨터에서 동일한 매개 변수를 사용하는 보고서 (VS에서)는 .DATA 접미사가있는 파일에 데이터를 캐시합니다. 2. RSExecutionLog를 확인하여 실제로 걸리는 시간을 확인 했습니까? 이것은 쿼리 및 렌더링 시간에 대한 세부 정보를 제공하며 일부 무료 보고서와 dtsx 패키지를 다운로드하여이 데이터를 지속/표시 할 수 있습니다. –

답변

0

매개 변수 스니핑 일 수 있습니다. 일부 데이터 또는 일부 테이블을 변경 한 경우 이전 데이터 모델에 대해 sp를 만족하는 캐시 된 계획이 더 이상 유효하지 않을 수 있습니다.

여기에 매우 비슷한 일을 답변 : stored procedure performance issue

인용구 :

당신은 SQL이 동일하고 있는지 f를

params 객체를 파라미터는 다음 매개 변수 스니핑 문제가 발생 될 수있는 동일한 지 .

아주 드문 문제입니다. 한 번만 나에게 그런 일이 있었고 그 이후로 항상 문제를 해결했습니다. 여기에 문제의 빠른 개요를

시작 :

http://blogs.msdn.com/b/queryoptteam/archive/2006/03/31/565991.aspx

http://elegantcode.com/2008/05/17/sql-parameter-sniffing-and-what-to-do-about-it/

은 SP 내부의 지역 변수를 선언하려고 그들에게 매개 변수의 알엇을 할당합니다. 매개 변수 대신 로컬 변수를 사용하십시오.

그것은 기능이 아닙니다 벅스하지만 당신이 갈 수 @ "

3

M 케년 II

데이터베이스 B는 그냥 복제 일부 변경과 데이터를 가지고 $ @ (우리는 단지 읽기 데이터, 모든 새로운 데이터) 야간 복제에서 비롯됩니다.

모든 인덱스가 그들이하고조각난 그들은 여전히 ​​존재하는 경우, 확인 데이터베이스 B.에 대한 변경 사항을 살아 있는지 확인 210)로 전송한다.

인덱스는 성능에 큰 영향을 줄 수 있습니다.

쿼리가 실행하는 데 시간이 오래 걸리면 많은 이유가있을 수 있습니다. 빠르게 실행하는 SSRS를 얻기위한 몇 가지 트릭을 여기에서 찾을 수 있습니다 :

http://www.sqlservercentral.com/Forums/Topic859015-150-1.aspx

편집 : 다음은 위의 링크에서 관련 정보입니다.

AshMc

나는 몇 시간 전에 우리는 우리가 SQL 데이터 집합에 SSRS 내에서 매개 변수를 전달하는 것과 같은 문제를 가지고 기억하며 (SSMS에서 그 일에 비해 모두 둔화 것 분과 비교했을 때 분). SSRS가 매개 변수를 전달할 때 값을 다시 계산하고 한 번 저장하지 않는 것으로 나타났습니다.

내가 한 것은 데이터 세트에서 새로운 TSQL 매개 변수를 먼저 선언하고 SSRS 매개 변수와 같도록 설정 한 다음 SSMS에서와 같이 새 매개 변수를 사용합니다.

예 :

DECLARE @X as int 
SET @X = @SSRSParameter 

janavarr

감사 AshMc,이 사람은 날 위해 일했습니다. 그러나 지금 내 문제는 단일 매개 변수로만 작동하며 여러 매개 변수 값을 전달하려는 경우 쿼리가 실행되지 않는다는 것입니다.

...

AshMc

은 내가 이전에 이런 짓을하는 방법을 찾을 수 있었다. Temp 테이블을 만들었습니다. 그 테이블에 값을 배치하고 기본 쿼리에 내부 조인을했습니다. SSRS 매개 변수는 temp 테이블에 무엇을 넣을지에 대한 필터로만 사용됩니다.

이 이런 식

DECLARE @ParameterList TABLE (ValueA Varchar(20)) 

INSERT INTO @ParameterList 
select ValueA 
from TableA 
where ValueA = @ValueB 


INNER JOIN @ParameterList 
ON ValueC = ValueA 

희망이 도움이 일을 보고서 실행 시간을 많이

--Dubs 당신이 실행하는 경우 있음을 알 수 있습니까

+0

+1, SET @X = @SSRSParameter 트릭이 저에게 효과적이었습니다! – Arnoldiusss

관련 문제