2014-12-15 3 views
0

몇 가지 조인이 포함 된 쿼리를 실행하고 QA 환경에 사용되는 SQL Server 인스턴스에서 약 4K 개의 레코드를 반환합니다. 로컬 개발 컴퓨터에서 쿼리를 실행하고 SSMS를 통해 DEV 환경에 사용되는 SQL Server 인스턴스에서 쿼리가 즉시 반환됩니다 (0 초). 그러나 QA 환경의 SSMS 쿼리 창에서 동일한 쿼리를 실행하면 약 50 돌아올 초. 쿼리가 엔티티 프레임 워크 6. .NET 응용 프로그램에 사용 된 코드를 사용하여 .NET 응용 프로그램에서 생성되는 것은 다음SQL Server : select query timeout

exec sp_executesql N'SELECT 
[Project4].[Number] AS [Number], 
[Project4].[Id] AS [Id], 
[Project4].[ProductTypeId] AS [ProductTypeId], 
[Project4].[GlidePathTypeId] AS [GlidePathTypeId], 
[Project4].[CashEquivalentPreferenceId] AS [CashEquivalentPreferenceId], 
[Project4].[TAMClientId] AS [TAMClientId], 
[Project4].[C3] AS [C1], 
[Project4].[Number1] AS [Number1], 
[Project4].[Id1] AS [Id1], 
[Project4].[TAMId] AS [TAMId], 
[Project4].[C2] AS [C2], 
[Project4].[Id3] AS [Id2], 
[Project4].[DisplayOrder] AS [DisplayOrder], 
[Project4].[Id2] AS [Id3], 
[Project4].[TAMAssetClassId] AS [TAMAssetClassId], 
[Project4].[Percentage] AS [Percentage], 
[Project4].[ModelId] AS [ModelId], 
[Project4].[Name] AS [Name], 
[Project4].[IsCore] AS [IsCore], 
[Project4].[ExpectedReturn] AS [ExpectedReturn], 
[Project4].[StandardDeviation] AS [StandardDeviation], 
[Project4].[BroadAssetClassTypeId] AS [BroadAssetClassTypeId], 
[Project4].[Id4] AS [Id4], 
[Project4].[Name1] AS [Name1], 
[Project4].[DisplayOrder1] AS [DisplayOrder1], 
[Project4].[C1] AS [C3], 
[Project4].[Id5] AS [Id5], 
[Project4].[TAMAssetClassXAxisId] AS [TAMAssetClassXAxisId], 
[Project4].[TAMAssetClassYAxisId] AS [TAMAssetClassYAxisId], 
[Project4].[Correlation] AS [Correlation] 
FROM (SELECT 
    [Project3].[Id] AS [Id], 
    [Project3].[Number] AS [Number], 
    [Project3].[ProductTypeId] AS [ProductTypeId], 
    [Project3].[GlidePathTypeId] AS [GlidePathTypeId], 
    [Project3].[CashEquivalentPreferenceId] AS [CashEquivalentPreferenceId], 
    [Project3].[TAMClientId] AS [TAMClientId], 
    [Project3].[Id1] AS [Id1], 
    [Project3].[Number1] AS [Number1], 
    [Project3].[TAMId] AS [TAMId], 
    [Project3].[Id2] AS [Id2], 
    [Project3].[TAMAssetClassId] AS [TAMAssetClassId], 
    [Project3].[Percentage] AS [Percentage], 
    [Project3].[ModelId] AS [ModelId], 
    [Project3].[DisplayOrder] AS [DisplayOrder], 
    [Project3].[Id3] AS [Id3], 
    [Project3].[Name] AS [Name], 
    [Project3].[IsCore] AS [IsCore], 
    [Project3].[ExpectedReturn] AS [ExpectedReturn], 
    [Project3].[StandardDeviation] AS [StandardDeviation], 
    [Project3].[BroadAssetClassTypeId] AS [BroadAssetClassTypeId], 
    [Project3].[Id4] AS [Id4], 
    [Project3].[Name1] AS [Name1], 
    [Project3].[DisplayOrder1] AS [DisplayOrder1], 
    [Project3].[Id5] AS [Id5], 
    [Project3].[TAMAssetClassXAxisId] AS [TAMAssetClassXAxisId], 
    [Project3].[TAMAssetClassYAxisId] AS [TAMAssetClassYAxisId], 
    [Project3].[Correlation] AS [Correlation], 
    CASE WHEN ([Project3].[Id1] IS NULL) THEN CAST(NULL AS int) WHEN ([Project3].[Id2] IS NULL) THEN CAST(NULL AS int) WHEN ([Project3].[Id5] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1], 
    CASE WHEN ([Project3].[Id1] IS NULL) THEN CAST(NULL AS int) WHEN ([Project3].[Id2] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C2], 
    CASE WHEN ([Project3].[Id1] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C3] 
    FROM (SELECT 
     [Project2].[Id] AS [Id], 
     [Project2].[Number] AS [Number], 
     [Project2].[ProductTypeId] AS [ProductTypeId], 
     [Project2].[GlidePathTypeId] AS [GlidePathTypeId], 
     [Project2].[CashEquivalentPreferenceId] AS [CashEquivalentPreferenceId], 
     [Project2].[TAMClientId] AS [TAMClientId], 
     [Project2].[Id1] AS [Id1], 
     [Project2].[Number1] AS [Number1], 
     [Project2].[TAMId] AS [TAMId], 
     [Project2].[Id2] AS [Id2], 
     [Project2].[TAMAssetClassId] AS [TAMAssetClassId], 
     [Project2].[Percentage] AS [Percentage], 
     [Project2].[ModelId] AS [ModelId], 
     [Project2].[DisplayOrder] AS [DisplayOrder], 
     [Project2].[Id3] AS [Id3], 
     [Project2].[Name] AS [Name], 
     [Project2].[IsCore] AS [IsCore], 
     [Project2].[ExpectedReturn] AS [ExpectedReturn], 
     [Project2].[StandardDeviation] AS [StandardDeviation], 
     [Project2].[BroadAssetClassTypeId] AS [BroadAssetClassTypeId], 
     [Project2].[Id4] AS [Id4], 
     [Project2].[Name1] AS [Name1], 
     [Project2].[DisplayOrder1] AS [DisplayOrder1], 
     [Project2].[Id5] AS [Id5], 
     [Project2].[TAMAssetClassXAxisId] AS [TAMAssetClassXAxisId], 
     [Project2].[TAMAssetClassYAxisId] AS [TAMAssetClassYAxisId], 
     [Project2].[Correlation] AS [Correlation] 
     FROM (SELECT 
      [Limit1].[Id] AS [Id], 
      [Limit1].[Number] AS [Number], 
      [Limit1].[ProductTypeId] AS [ProductTypeId], 
      [Limit1].[GlidePathTypeId] AS [GlidePathTypeId], 
      [Limit1].[CashEquivalentPreferenceId] AS [CashEquivalentPreferenceId], 
      [Limit1].[TAMClientId] AS [TAMClientId], 
      [Join4].[Id1] AS [Id1], 
      [Join4].[Number] AS [Number1], 
      [Join4].[TAMId] AS [TAMId], 
      [Join4].[Id2] AS [Id2], 
      [Join4].[TAMAssetClassId] AS [TAMAssetClassId], 
      [Join4].[Percentage] AS [Percentage], 
      [Join4].[ModelId] AS [ModelId], 
      [Join4].[DisplayOrder1] AS [DisplayOrder], 
      [Join4].[Id3] AS [Id3], 
      [Join4].[Name1] AS [Name], 
      [Join4].[IsCore] AS [IsCore], 
      [Join4].[ExpectedReturn] AS [ExpectedReturn], 
      [Join4].[StandardDeviation] AS [StandardDeviation], 
      [Join4].[BroadAssetClassTypeId] AS [BroadAssetClassTypeId], 
      [Join4].[Id4] AS [Id4], 
      [Join4].[Name2] AS [Name1], 
      [Join4].[DisplayOrder2] AS [DisplayOrder1], 
      [Join4].[Id5] AS [Id5], 
      [Join4].[TAMAssetClassXAxisId] AS [TAMAssetClassXAxisId], 
      [Join4].[TAMAssetClassYAxisId] AS [TAMAssetClassYAxisId], 
      [Join4].[Correlation] AS [Correlation] 
      FROM (SELECT TOP (2) 
       [Extent1].[Id] AS [Id], 
       [Extent1].[Number] AS [Number], 
       [Extent1].[ProductTypeId] AS [ProductTypeId], 
       [Extent1].[GlidePathTypeId] AS [GlidePathTypeId], 
       [Extent1].[CashEquivalentPreferenceId] AS [CashEquivalentPreferenceId], 
       [Extent1].[TAMClientId] AS [TAMClientId] 
       FROM [dbo].[TAM] AS [Extent1] 
       WHERE [Extent1].[Id] = @p__linq__0) AS [Limit1] 
      LEFT OUTER JOIN (SELECT [Extent2].[Id] AS [Id1], [Extent2].[Number] AS [Number], [Extent2].[TAMId] AS [TAMId], [Join3].[Id2], [Join3].[TAMAssetClassId], [Join3].[Percentage], [Join3].[ModelId], [Join3].[DisplayOrder1], [Join3].[Id3], [Join3].[Name1], [Join3].[IsCore], [Join3].[ExpectedReturn], [Join3].[StandardDeviation], [Join3].[BroadAssetClassTypeId], [Join3].[Id4], [Join3].[Name2], [Join3].[DisplayOrder2], [Join3].[Id5], [Join3].[TAMAssetClassXAxisId], [Join3].[TAMAssetClassYAxisId], [Join3].[Correlation] 
       FROM [dbo].[TAMAssetClassModel] AS [Extent2] 
       LEFT OUTER JOIN (SELECT [Extent3].[Id] AS [Id2], [Extent3].[TAMAssetClassId] AS [TAMAssetClassId], [Extent3].[Percentage] AS [Percentage], [Extent3].[ModelId] AS [ModelId], [Extent3].[DisplayOrder] AS [DisplayOrder1], [Extent4].[Id] AS [Id3], [Extent4].[Name] AS [Name1], [Extent4].[IsCore] AS [IsCore], [Extent4].[ExpectedReturn] AS [ExpectedReturn], [Extent4].[StandardDeviation] AS [StandardDeviation], [Extent4].[BroadAssetClassTypeId] AS [BroadAssetClassTypeId], [Extent5].[Id] AS [Id4], [Extent5].[Name] AS [Name2], [Extent5].[DisplayOrder] AS [DisplayOrder2], [Extent6].[Id] AS [Id5], [Extent6].[TAMAssetClassXAxisId] AS [TAMAssetClassXAxisId], [Extent6].[TAMAssetClassYAxisId] AS [TAMAssetClassYAxisId], [Extent6].[Correlation] AS [Correlation] 
        FROM [dbo].[TAMAssetClassAllocation] AS [Extent3] 
        INNER JOIN [dbo].[TAMAssetClass] AS [Extent4] ON [Extent3].[TAMAssetClassId] = [Extent4].[Id] 
        INNER JOIN [dbo].[BroadAssetClassType] AS [Extent5] ON [Extent4].[BroadAssetClassTypeId] = [Extent5].[Id] 
        LEFT OUTER JOIN [dbo].[TAMAssetClassCorrelation] AS [Extent6] ON [Extent3].[TAMAssetClassId] = [Extent6].[TAMAssetClassYAxisId]) AS [Join3] ON [Extent2].[Id] = [Join3].[ModelId]) AS [Join4] ON [Limit1].[Id] = [Join4].[TAMId] 
     ) AS [Project2] 
    ) AS [Project3] 
) AS [Project4] 
ORDER BY [Project4].[Id] ASC, [Project4].[C3] ASC, [Project4].[Id1] ASC, [Project4].[C2] ASC, [Project4].[Id3] ASC, [Project4].[Id2] ASC, [Project4].[Id4] ASC, [Project4].[C1] ASC',N'@p__linq__0 uniqueidentifier',@p__linq__0='63C18415-1101-47A9-9BDE-5950AAACA488' 
:

var includes = new List<Expression<Func<TAM, object>>>(); 
includes.Add(t => t.AssetClassModels); 
includes.Add(t => t.AssetClassModels.Select(acm => acm.Allocations)); 
includes.Add(t => t.AssetClassModels.Select(acm => acm.Allocations.Select(a => a.TAMAssetClass))); 
includes.Add(t => t.AssetClassModels.Select(acm => acm.Allocations.Select(a => a.TAMAssetClass.BroadAssetClassType))); 
includes.Add(t => t.AssetClassModels.Select(acm => acm.Allocations.Select(a => a.TAMAssetClass.Correlations))); 
var tam = innerUnitOfWork.Repository<TAM>().Find(x => x.Id == tamResult.TAM.Id, includes); 

위의 코드에 의해 생성 된 SQL 쿼리는 다음과 같다

데이터베이스 구조 (테이블)와 데이터가 모든 로컬, DEV 및 QA 환경에서 동일 할 때 QA 환경에서 실행 속도가 느려질 가능성이 더 큰 원인은 무엇입니까? 이 쿼리를 실행하는 데 걸리는 시간을 어떻게 단축 할 수 있습니까? 인덱스는 세 가지 환경 모두에서 동일합니다. 서버와이 경우 대부분의 아마 당신이 품질 보증 서버의 실행 계획에 조인 최적화하지 않는 것을 발견 할 것이다

, 당신은 그것의 실행을 최적화하기 위해 QA 서버에 update statistics를 실행해야합니다 모두

+0

QA 서버에서 통계를 확인했거나 업데이트했을 가능성이 있습니까? 아마도 이것들은 큰 데이터로드 나 그와 비슷한 것 이후에 동기화되지 않습니다 ... –

+0

서버의 SQL 버전은 무엇입니까? 세션 번호는 개입니까? 재 컴파일로 확인 하시겠습니까? 결국 결국 두 버전의 실행 계획을 자세히보고 싶습니다. –

답변

0

계획이다. 그래서 제가 생각할 수있는 유일한 이유는 QA 환경에서 통계가 업데이트되지 않는다는 것입니다. 전에도이 문제가 있었고 통계를 업데이트하여 해결했습니다.

+0

2 시간 전에 게시 된 답변과 내 답변의 차이점을 설명해주십시오. 당신이 내 대답에 동의한다면, 대답을 복제하는 대신 그것을지지하는 것이 더 낫다. – Gouda

+0

나는이 포럼의 초보자이기 때문에 어떻게 작동하는지 이해할 수 있습니다. 루키 실수로 이것을 헤아려보십시오. 나는 당신의 대답을 투표하려고 노력했다. 그러나 나는 그것을하기 위해 15 가지 평판이 필요하다는 말을하지 않았다. – srh