몇 가지 조인이 포함 된 쿼리를 실행하고 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
를 실행해야합니다 모두
QA 서버에서 통계를 확인했거나 업데이트했을 가능성이 있습니까? 아마도 이것들은 큰 데이터로드 나 그와 비슷한 것 이후에 동기화되지 않습니다 ... –
서버의 SQL 버전은 무엇입니까? 세션 번호는 개입니까? 재 컴파일로 확인 하시겠습니까? 결국 결국 두 버전의 실행 계획을 자세히보고 싶습니다. –